diff --git a/app/build.gradle b/app/build.gradle index 11be87c..8808108 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,13 +9,13 @@ android { storePassword 'helper' } } - compileSdkVersion 28 + compileSdkVersion 27 defaultConfig { applicationId "group.tonight.vipvideohelper" minSdkVersion 15 - targetSdkVersion 28 + targetSdkVersion 27 versionCode 1 - versionName "1.0.9" + versionName "1.1.0" } buildTypes { release { @@ -37,17 +37,20 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.android.support:appcompat-v7:28.0.0-rc01' + implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.2' - implementation 'com.android.support:design:28.0.0-rc01' + implementation 'com.android.support:design:27.1.1' //the core iconcis library (without any widgets) // implementation "com.mikepenz:iconics-core:3.1.0-rc01" // implementation "androidx.appcompat:appcompat:${versions.androidXVersion}" // implementation 'com.mikepenz:google-material-typeface:3.0.1.2.original@aar' - implementation 'org.jsoup:jsoup:1.11.3' - implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation 'com.google.code.gson:gson:2.8.5' implementation 'com.yanzhenjie:permission:2.0.0-rc5' +// implementation 'com.github.bumptech.glide:glide:4.8.0' + implementation 'com.google.zxing:core:3.3.3' + // implementation 'com.google.zxing:android-core:3.3.0' + // implementation 'com.google.zxing:android-integration:3.3.0' +// implementation 'com.google.zxing:javase:3.3.3' } diff --git a/app/src/main/java/group/tonight/vipvideohelper/activities/SettingActivity.java b/app/src/main/java/group/tonight/vipvideohelper/activities/SettingActivity.java index 2100e72..a7d6274 100644 --- a/app/src/main/java/group/tonight/vipvideohelper/activities/SettingActivity.java +++ b/app/src/main/java/group/tonight/vipvideohelper/activities/SettingActivity.java @@ -5,11 +5,14 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; import android.view.View; +import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; @@ -19,15 +22,17 @@ import java.util.List; -import group.tonight.vipvideohelper.other.Consts; import group.tonight.vipvideohelper.DownLoadService; import group.tonight.vipvideohelper.R; import group.tonight.vipvideohelper.VersionUpdateBean; import group.tonight.vipvideohelper.VersionUpdater; +import group.tonight.vipvideohelper.other.Consts; +import group.tonight.vipvideohelper.other.QRCode; public class SettingActivity extends BaseBackActivity { private TextView mVersionTextView; + private ImageView mShareAppImageView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -35,6 +40,22 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_setting); mVersionTextView = (TextView) findViewById(R.id.version); + mShareAppImageView = (ImageView) findViewById(R.id.share_app); + + VersionUpdater versionUpdater = new VersionUpdater(); + versionUpdater.observe(this, new Observer() { + @Override + public void onChanged(@Nullable VersionUpdateBean.AssetsBean assetsBean) { + if (assetsBean == null) { + return; + } + String mBrowser_download_url = assetsBean.getBrowser_download_url(); + + Bitmap bitmap = QRCode.createQRCodeWithLogo(mBrowser_download_url, 500, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)); + mShareAppImageView.setImageBitmap(bitmap); + } + }); + mVersionTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -46,7 +67,7 @@ public void onChanged(@Nullable final VersionUpdateBean.AssetsBean assetsBean) { return; } final String content_type = assetsBean.getContent_type(); - final String browser_download_url = assetsBean.getBrowser_download_url(); + final int id = assetsBean.getId(); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(SettingActivity.this); int lastVersionId = preferences.getInt(Consts.KEY_LAST_VERSION_ID, 0); diff --git a/app/src/main/java/group/tonight/vipvideohelper/other/QRCode.java b/app/src/main/java/group/tonight/vipvideohelper/other/QRCode.java new file mode 100644 index 0000000..f4cdfe2 --- /dev/null +++ b/app/src/main/java/group/tonight/vipvideohelper/other/QRCode.java @@ -0,0 +1,145 @@ +package group.tonight.vipvideohelper.other; + +import android.graphics.Bitmap; +import android.graphics.Matrix; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; + +import java.util.Hashtable; + +/** + * 当前类注释:生成二维码的工具类 + * 作者:jinwenfeng on 16/2/18 13:50 + * 邮箱:823546371@qq.com + * QQ: 823546371 + * 公司:南京穆尊信息科技有限公司 + * © 2016 jinwenfeng + * ©版权所有,未经允许不得传播 + */ +public class QRCode { + private static int IMAGE_HALFWIDTH = 50;//宽度值,影响中间图片大小 + /** + * 生成二维码,默认大小为500*500 + * + * @param text 需要生成二维码的文字、网址等 + * @return bitmap + */ + public static Bitmap createQRCode(String text) { + return createQRCode(text, 500); + } + + /** + * 生成二维码 + * + * @param text 需要生成二维码的文字、网址等 + * @param size 需要生成二维码的大小() + * @return bitmap + */ + public static Bitmap createQRCode(String text, int size) { + try { + Hashtable hints = new Hashtable<>(); + hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); + BitMatrix bitMatrix = new QRCodeWriter().encode(text, + BarcodeFormat.QR_CODE, size, size, hints); + int[] pixels = new int[size * size]; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + if (bitMatrix.get(x, y)) { + pixels[y * size + x] = 0xff000000; + } else { + pixels[y * size + x] = 0xffffffff; + } + + } + } + Bitmap bitmap = Bitmap.createBitmap(size, size, + Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, size, 0, 0, size, size); + return bitmap; + } catch (WriterException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 生成带logo的二维码,默认二维码的大小为500,logo为二维码的1/5 + * + * @param text 需要生成二维码的文字、网址等 + * @param mBitmap logo文件 + * @return bitmap + */ + public static Bitmap createQRCodeWithLogo(String text, Bitmap mBitmap) { + return createQRCodeWithLogo(text,500,mBitmap); + } + + /** + * 生成带logo的二维码,logo默认为二维码的1/5 + * + * @param text 需要生成二维码的文字、网址等 + * @param size 需要生成二维码的大小() + * @param mBitmap logo文件 + * @return bitmap + */ + public static Bitmap createQRCodeWithLogo(String text, int size, Bitmap mBitmap) { + try { + IMAGE_HALFWIDTH = size/10; + Hashtable hints = new Hashtable<>(); + hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); + /* + * 设置容错级别,默认为ErrorCorrectionLevel.L + * 因为中间加入logo所以建议你把容错级别调至H,否则可能会出现识别不了 + */ + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + BitMatrix bitMatrix = new QRCodeWriter().encode(text, + BarcodeFormat.QR_CODE, size, size, hints); + + int width = bitMatrix.getWidth();//矩阵高度 + int height = bitMatrix.getHeight();//矩阵宽度 + int halfW = width / 2; + int halfH = height / 2; + + Matrix m = new Matrix(); + float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth(); + float sy = (float) 2 * IMAGE_HALFWIDTH + / mBitmap.getHeight(); + m.setScale(sx, sy); + //设置缩放信息 + //将logo图片按martix设置的信息缩放 + mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, + mBitmap.getWidth(), mBitmap.getHeight(), m, false); + + int[] pixels = new int[size * size]; + for (int y = 0; y < size; y++) { + for (int x = 0; x < size; x++) { + if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH + && y > halfH - IMAGE_HALFWIDTH + && y < halfH + IMAGE_HALFWIDTH) { + //该位置用于存放图片信息 + //记录图片每个像素信息 + pixels[y * width + x] = mBitmap.getPixel(x - halfW + + IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH); + } else { + if (bitMatrix.get(x, y)) { + pixels[y * size + x] = 0xff000000; + } else { + pixels[y * size + x] = 0xffffffff; + } + } + } + } + Bitmap bitmap = Bitmap.createBitmap(size, size, + Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, size, 0, 0, size, size); + return bitmap; + } catch (WriterException e) { + e.printStackTrace(); + return null; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/group/tonight/vipvideohelper/other/QRCodeUtil.java b/app/src/main/java/group/tonight/vipvideohelper/other/QRCodeUtil.java new file mode 100644 index 0000000..00d9f75 --- /dev/null +++ b/app/src/main/java/group/tonight/vipvideohelper/other/QRCodeUtil.java @@ -0,0 +1,107 @@ +package group.tonight.vipvideohelper.other; + +import android.graphics.Bitmap; +import android.graphics.Color; +import android.support.annotation.ColorInt; +import android.support.annotation.Nullable; +import android.text.TextUtils; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; + +import java.util.Hashtable; + +/** + * Bitmap qrCodeBitmap = QRCodeUtil.createQRCodeBitmap("https://www.baidu.com", 480, 480); + * + * @ClassName: QRCodeUtil + * @Description: 二维码工具类 + * @Author Wangnan + * @Date 2017/2/8 + */ + +public class QRCodeUtil { + + /** + * 创建二维码位图 + * + * @param content 字符串内容(支持中文) + * @param width 位图宽度(单位:px) + * @param height 位图高度(单位:px) + * @return + */ + @Nullable + public static Bitmap createQRCodeBitmap(String content, int width, int height) { + return createQRCodeBitmap(content, width, height, "UTF-8", "H", "2", Color.BLACK, Color.WHITE); + } + + /** + * 创建二维码位图 (支持自定义配置和自定义样式) + * + * @param content 字符串内容 + * @param width 位图宽度,要求>=0(单位:px) + * @param height 位图高度,要求>=0(单位:px) + * @param character_set 字符集/字符转码格式 (支持格式:{@link CharacterSetECI })。传null时,zxing源码默认使用 "ISO-8859-1" + * @param error_correction 容错级别 (支持级别:{@link ErrorCorrectionLevel })。传null时,zxing源码默认使用 "L" + * @param margin 空白边距 (可修改,要求:整型且>=0), 传null时,zxing源码默认使用"4"。 + * @param color_black 黑色色块的自定义颜色值 + * @param color_white 白色色块的自定义颜色值 + * @return + */ + @Nullable + public static Bitmap createQRCodeBitmap(String content, int width, int height, + @Nullable String character_set, @Nullable String error_correction, @Nullable String margin, + @ColorInt int color_black, @ColorInt int color_white) { + + /** 1.参数合法性判断 */ + if (TextUtils.isEmpty(content)) { // 字符串内容判空 + return null; + } + + if (width < 0 || height < 0) { // 宽和高都需要>=0 + return null; + } + + try { + /** 2.设置二维码相关配置,生成BitMatrix(位矩阵)对象 */ + Hashtable hints = new Hashtable<>(); + + if (!TextUtils.isEmpty(character_set)) { + hints.put(EncodeHintType.CHARACTER_SET, character_set); // 字符转码格式设置 + } + + if (!TextUtils.isEmpty(error_correction)) { + hints.put(EncodeHintType.ERROR_CORRECTION, error_correction); // 容错级别设置 + } + + if (!TextUtils.isEmpty(margin)) { + hints.put(EncodeHintType.MARGIN, margin); // 空白边距设置 + } + BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); + + /** 3.创建像素数组,并根据BitMatrix(位矩阵)对象为数组元素赋颜色值 */ + int[] pixels = new int[width * height]; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + if (bitMatrix.get(x, y)) { + pixels[y * width + x] = color_black; // 黑色色块像素设置 + } else { + pixels[y * width + x] = color_white; // 白色色块像素设置 + } + } + } + + /** 4.创建Bitmap对象,根据像素数组设置Bitmap每个像素点的颜色值,之后返回Bitmap对象 */ + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, width, 0, 0, width, height); + return bitmap; + } catch (WriterException e) { + e.printStackTrace(); + } + + return null; + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index f19d669..ee161d7 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -8,22 +8,29 @@ android:paddingTop="8dp" tools:context=".activities.SettingActivity"> - + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginTop="16dp" + android:text="好东西应该值得被分享" /> + + \ No newline at end of file