From 2d5458481dcd0ae8f3bd0b678c7e92b22806735a Mon Sep 17 00:00:00 2001 From: Gudong Date: Sun, 25 Dec 2016 23:48:05 +0800 Subject: [PATCH] add feature for get app info --- app/build.gradle | 3 +- app/src/main/AndroidManifest.xml | 27 +++-- .../gudong/appkit/adapter/AppInfoAdapter.java | 51 +++++++++ .../java/com/gudong/appkit/dao/AppDetail.java | 16 +++ .../com/gudong/appkit/dao/AppMetaCompat.java | 17 +++ .../com/gudong/appkit/dao/WeChatHelper.java | 4 + .../appkit/ui/activity/AppInfoActivity.java | 104 ++++++++++++++++++ ...pActivity.java => AppOperateActivity.java} | 23 ++-- .../appkit/ui/activity/SplashActivity.java | 1 + .../appkit/ui/control/NavigationManager.java | 8 ++ .../ui/controller/AppBasicViewController.java | 72 ++++++++++++ .../AppComponentViewController.java | 76 +++++++++++++ .../AppPermissionViewController.java | 46 ++++++++ .../appkit/ui/fragment/AppListFragment.java | 8 +- app/src/main/res/drawable/bg_card.xml | 15 +++ app/src/main/res/layout/activity_app_info.xml | 27 +++++ .../res/layout/vc_layout_app_activity.xml | 25 +++++ .../main/res/layout/vc_layout_app_basic.xml | 104 ++++++++++++++++++ .../res/layout/vc_layout_app_permission.xml | 26 +++++ app/src/main/res/values/colors.xml | 3 + app/src/main/res/values/dimens.xml | 3 + gradle.properties | 6 +- library/build.gradle | 4 +- 23 files changed, 636 insertions(+), 33 deletions(-) create mode 100644 app/src/main/java/com/gudong/appkit/adapter/AppInfoAdapter.java create mode 100644 app/src/main/java/com/gudong/appkit/dao/AppDetail.java create mode 100644 app/src/main/java/com/gudong/appkit/dao/AppMetaCompat.java create mode 100644 app/src/main/java/com/gudong/appkit/ui/activity/AppInfoActivity.java rename app/src/main/java/com/gudong/appkit/ui/activity/{AppActivity.java => AppOperateActivity.java} (90%) create mode 100644 app/src/main/java/com/gudong/appkit/ui/controller/AppBasicViewController.java create mode 100644 app/src/main/java/com/gudong/appkit/ui/controller/AppComponentViewController.java create mode 100644 app/src/main/java/com/gudong/appkit/ui/controller/AppPermissionViewController.java create mode 100644 app/src/main/res/drawable/bg_card.xml create mode 100644 app/src/main/res/layout/activity_app_info.xml create mode 100644 app/src/main/res/layout/vc_layout_app_activity.xml create mode 100644 app/src/main/res/layout/vc_layout_app_basic.xml create mode 100644 app/src/main/res/layout/vc_layout_app_permission.xml diff --git a/app/build.gradle b/app/build.gradle index aec124f..84a045d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,7 +28,7 @@ def releaseTime() { android { compileSdkVersion Integer.parseInt(project.ANDROID_COMPILE_SDK_VERSION) - buildToolsVersion '23.0.2' + buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION defaultConfig { applicationId project.GROUP @@ -161,6 +161,7 @@ dependencies { //A small Android library to manage one-off operations. compile 'com.jonathanfinerty.once:once:1.0.3' compile project(':library') + compile 'com.github.maoruibin:ViewController:0.9.0' } task showMeCache << { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 59cb41a..c96bac9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,7 @@ - + @@ -13,19 +12,18 @@ - + tools:ignore="ProtectedPermissions"/> + android:theme="@style/Theme_AppPlus" + tools:replace="label"> - @@ -58,15 +57,19 @@ - + + + + + - + \ No newline at end of file diff --git a/app/src/main/java/com/gudong/appkit/adapter/AppInfoAdapter.java b/app/src/main/java/com/gudong/appkit/adapter/AppInfoAdapter.java new file mode 100644 index 0000000..b946907 --- /dev/null +++ b/app/src/main/java/com/gudong/appkit/adapter/AppInfoAdapter.java @@ -0,0 +1,51 @@ +package com.gudong.appkit.adapter; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +/** + * Created by GuDong on 2016/12/25 18:53. + * Contact with gudong.name@gmail.com. + */ + +public class AppInfoAdapter extends RecyclerView.Adapter { + final static int TYPE_BASIC = 0; + final static int TYPE_PERMISSION = 1; + final static int TYPE_ACTIVITY = 2; + + @Override + public AppInfoListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return null; + } + + @Override + public void onBindViewHolder(AppInfoListAdapter.ViewHolder holder, int position) { + + } + + @Override + public int getItemViewType(int position) { + switch (position){ + case 0: + return TYPE_BASIC; + case 1: + return TYPE_PERMISSION; + case 2: + return TYPE_ACTIVITY; + } + return super.getItemViewType(position); + } + + @Override + public int getItemCount() { + return 0; + } + + static class ViewHolder extends RecyclerView.ViewHolder{ + + public ViewHolder(View itemView) { + super(itemView); + } + } +} diff --git a/app/src/main/java/com/gudong/appkit/dao/AppDetail.java b/app/src/main/java/com/gudong/appkit/dao/AppDetail.java new file mode 100644 index 0000000..6c6ab3a --- /dev/null +++ b/app/src/main/java/com/gudong/appkit/dao/AppDetail.java @@ -0,0 +1,16 @@ +package com.gudong.appkit.dao; + +import com.jaredrummler.apkparser.model.UseFeature; + +import java.util.List; + +/** + * Created by GuDong on 2016/12/25 19:10. + * Contact with gudong.name@gmail.com. + */ + +public class AppDetail { + public AppEntity entity; + List usesFeatures; + List requestedPermissions; +} diff --git a/app/src/main/java/com/gudong/appkit/dao/AppMetaCompat.java b/app/src/main/java/com/gudong/appkit/dao/AppMetaCompat.java new file mode 100644 index 0000000..ec141f3 --- /dev/null +++ b/app/src/main/java/com/gudong/appkit/dao/AppMetaCompat.java @@ -0,0 +1,17 @@ +package com.gudong.appkit.dao; + +/** + * Created by GuDong on 2016/12/25 21:18. + * Contact with gudong.name@gmail.com. + */ + +public class AppMetaCompat extends AppEntity { + public AppEntity appEntity; + public String maxSdkVersion; + public String minSdkVersion; + public String targetSdkVersion; + public String installLocation; + public AppMetaCompat(AppEntity entity ){ + this.appEntity = entity; + } +} diff --git a/app/src/main/java/com/gudong/appkit/dao/WeChatHelper.java b/app/src/main/java/com/gudong/appkit/dao/WeChatHelper.java index da4fa1a..4214052 100644 --- a/app/src/main/java/com/gudong/appkit/dao/WeChatHelper.java +++ b/app/src/main/java/com/gudong/appkit/dao/WeChatHelper.java @@ -18,6 +18,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -155,6 +156,9 @@ public List listTencentDownloads() { } if (wechatDownload.exists()) { File[] originList = wechatDownload.listFiles(); + if(originList == null){ + return Collections.EMPTY_LIST; + } List apkList = new ArrayList<>(); for (File file : originList) { if (file.getName().contains("apk")) { diff --git a/app/src/main/java/com/gudong/appkit/ui/activity/AppInfoActivity.java b/app/src/main/java/com/gudong/appkit/ui/activity/AppInfoActivity.java new file mode 100644 index 0000000..4025a17 --- /dev/null +++ b/app/src/main/java/com/gudong/appkit/ui/activity/AppInfoActivity.java @@ -0,0 +1,104 @@ +package com.gudong.appkit.ui.activity; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.widget.LinearLayout; + +import com.gudong.appkit.R; +import com.gudong.appkit.dao.AppEntity; +import com.gudong.appkit.dao.AppMetaCompat; +import com.gudong.appkit.dao.DataHelper; +import com.gudong.appkit.ui.controller.AppComponentViewController; +import com.gudong.appkit.ui.controller.AppBasicViewController; +import com.gudong.appkit.ui.controller.AppPermissionViewController; +import com.jaredrummler.apkparser.ApkParser; +import com.jaredrummler.apkparser.model.AndroidComponent; +import com.jaredrummler.apkparser.model.AndroidManifest; +import com.jaredrummler.apkparser.model.ApkMeta; +import com.jaredrummler.apkparser.model.UseFeature; + +import java.io.IOException; +import java.text.ParseException; +import java.util.List; + +public class AppInfoActivity extends BaseActivity { + private LinearLayout llContainer; + private AppBasicViewController basicViewController; + private AppPermissionViewController permissionViewController; + private AppComponentViewController activityViewController; + private AppComponentViewController serviceViewController; + private AppComponentViewController receiverViewController; + private AppComponentViewController providerViewController; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initView(); + basicViewController = new AppBasicViewController(this); + permissionViewController = new AppPermissionViewController(this); + activityViewController = new AppComponentViewController(this,AppComponentViewController.KEY_ACTIVITY); + serviceViewController = new AppComponentViewController(this,AppComponentViewController.KEY_SERVICE); + receiverViewController = new AppComponentViewController(this,AppComponentViewController.KEY_RECEIVER); + providerViewController = new AppComponentViewController(this,AppComponentViewController.KEY_PROVIDER); + + basicViewController.attachRoot(llContainer); + permissionViewController.attachRoot(llContainer); + activityViewController.attachRoot(llContainer); + + String packageName = getIntent().getStringExtra("package"); + fillData(packageName); + + } + + private void fillData(String packageName) { + PackageManager pm = getPackageManager(); + ApplicationInfo appInfo = null; + try { + appInfo = pm.getApplicationInfo(packageName, 0); + AppEntity entity = DataHelper.getAppByPackageName(packageName); + AppMetaCompat appMetaCompat = new AppMetaCompat(entity); + + ApkParser apkParser = ApkParser.create(appInfo); + ApkMeta meta = apkParser.getApkMeta(); + appMetaCompat.maxSdkVersion = meta.maxSdkVersion; + appMetaCompat.minSdkVersion = meta.minSdkVersion; + appMetaCompat.targetSdkVersion = meta.targetSdkVersion; + appMetaCompat.installLocation = meta.installLocation; + List usesFeatures = meta.usesFeatures; + List requestedPermissions = meta.usesPermissions; + + AndroidManifest androidManifest = apkParser.getAndroidManifest(); + List activities = androidManifest.activities; + List services = androidManifest.services; + List reveivers = androidManifest.receivers; + List providers = androidManifest.providers; + + basicViewController.fillData(appMetaCompat); + permissionViewController.fillData(requestedPermissions); + + activityViewController.fillData(activities); +// serviceViewController.fillData(services); +// receiverViewController.fillData(reveivers); +// providerViewController.fillData(providers); + + + + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + @Override + protected int initLayout() { + return R.layout.activity_app_info; + } + + private void initView() { + llContainer = (LinearLayout) findViewById(R.id.ll_container); + } +} diff --git a/app/src/main/java/com/gudong/appkit/ui/activity/AppActivity.java b/app/src/main/java/com/gudong/appkit/ui/activity/AppOperateActivity.java similarity index 90% rename from app/src/main/java/com/gudong/appkit/ui/activity/AppActivity.java rename to app/src/main/java/com/gudong/appkit/ui/activity/AppOperateActivity.java index a646f40..dbc8711 100644 --- a/app/src/main/java/com/gudong/appkit/ui/activity/AppActivity.java +++ b/app/src/main/java/com/gudong/appkit/ui/activity/AppOperateActivity.java @@ -52,7 +52,7 @@ import com.umeng.analytics.MobclickAgent; -public class AppActivity extends BaseActivity implements View.OnClickListener { +public class AppOperateActivity extends BaseActivity implements View.OnClickListener { // View name of the header image. Used for activity scene transitions public static final String VIEW_NAME_HEADER_IMAGE = "detail:header:image"; @@ -172,7 +172,8 @@ public void onClick(View v) { MobclickAgent.onEvent(this, "action_export"); break; case R.id.tv_detail: - NavigationManager.openAppDetail(this,mAppEntity.getPackageName()); +// NavigationManager.openAppDetail(this,mAppEntity.getPackageName()); + NavigationManager.openAppInfo(this,mAppEntity.getPackageName()); MobclickAgent.onEvent(this, "action_detail"); break; case R.id.tv_more: @@ -183,39 +184,39 @@ public void onClick(View v) { } private void showMoreDialog() { - new AlertDialog.Builder(this) + AlertDialog dialog = new AlertDialog.Builder(this) .setItems(R.array.more_action, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which){ case 0: openApp(); - MobclickAgent.onEvent(AppActivity.this, "more_open"); + MobclickAgent.onEvent(AppOperateActivity.this, "more_open"); break; case 1: uninstallApp(); - MobclickAgent.onEvent(AppActivity.this, "more_uninstall"); + MobclickAgent.onEvent(AppOperateActivity.this, "more_uninstall"); break; case 2: - NavigationManager.gotoMarket(AppActivity.this,mAppEntity.getPackageName()); - MobclickAgent.onEvent(AppActivity.this, "action_market"); + NavigationManager.gotoMarket(AppOperateActivity.this,mAppEntity.getPackageName()); + MobclickAgent.onEvent(AppOperateActivity.this, "action_market"); break; } } }) - .create() - .show(); + .create(); + dialog.show(); } private void uninstallApp() { if(Utils.isOwnApp(this,mAppEntity.getPackageName()))return; - NavigationManager.uninstallApp(AppActivity.this,mAppEntity.getPackageName()); + NavigationManager.uninstallApp(AppOperateActivity.this,mAppEntity.getPackageName()); } private void openApp() { if(Utils.isOwnApp(this,mAppEntity.getPackageName()))return; try { - NavigationManager.openApp(AppActivity.this,mAppEntity.getPackageName()); + NavigationManager.openApp(AppOperateActivity.this,mAppEntity.getPackageName()); } catch (Exception e) { e.printStackTrace(); Snackbar.make(mTvShare,String.format(getString(R.string.fail_open_app),mAppEntity.getAppName()),Snackbar.LENGTH_LONG).show(); diff --git a/app/src/main/java/com/gudong/appkit/ui/activity/SplashActivity.java b/app/src/main/java/com/gudong/appkit/ui/activity/SplashActivity.java index 602d92c..248a028 100644 --- a/app/src/main/java/com/gudong/appkit/ui/activity/SplashActivity.java +++ b/app/src/main/java/com/gudong/appkit/ui/activity/SplashActivity.java @@ -92,6 +92,7 @@ public void onClick(DialogInterface dialog, int which) { gotoMainActivity(false); } }) + .setCancelable(false) .show(); }else{ gotoMainActivity(true); diff --git a/app/src/main/java/com/gudong/appkit/ui/control/NavigationManager.java b/app/src/main/java/com/gudong/appkit/ui/control/NavigationManager.java index b292212..b51187a 100644 --- a/app/src/main/java/com/gudong/appkit/ui/control/NavigationManager.java +++ b/app/src/main/java/com/gudong/appkit/ui/control/NavigationManager.java @@ -33,6 +33,7 @@ import android.support.v7.app.AlertDialog; import com.gudong.appkit.R; +import com.gudong.appkit.ui.activity.AppInfoActivity; import com.gudong.appkit.ui.activity.MainActivity; import java.io.File; @@ -161,6 +162,13 @@ public static void openAppDetail(Context context, String packageName) { context.startActivity(intent); } + public static void openAppInfo(Context context, String packageName) { + Intent intent = new Intent(context,AppInfoActivity.class); + intent.putExtra("package",packageName); + context.startActivity(intent); + + } + public static void gotoMainActivityFromSplashView(Activity context) { context.startActivity(new Intent(context, MainActivity.class)); context.finish(); diff --git a/app/src/main/java/com/gudong/appkit/ui/controller/AppBasicViewController.java b/app/src/main/java/com/gudong/appkit/ui/controller/AppBasicViewController.java new file mode 100644 index 0000000..dc75309 --- /dev/null +++ b/app/src/main/java/com/gudong/appkit/ui/controller/AppBasicViewController.java @@ -0,0 +1,72 @@ +package com.gudong.appkit.ui.controller; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gudong.appkit.R; +import com.gudong.appkit.dao.AppMetaCompat; + +import name.gudong.viewcontroller.ViewController; + + +public class AppBasicViewController extends ViewController { + + private android.widget.ImageView ivIcon; + private android.widget.TextView tvName; + private android.widget.TextView tvVersion; + private android.widget.TextView tvVersionCode; + private android.widget.TextView tvPackage; + private TextView tvMaxSdkVersion; + private TextView tvMinSdkVersion; + private TextView tvTargetSdkVersion; + private TextView tvInstallLocation; + + public AppBasicViewController(Context context) { + super(context); + } + + @Override + protected int resLayoutId() { + return R.layout.vc_layout_app_basic; + } + + @Override + protected void onCreatedView(View view) { + ivIcon = (ImageView) view.findViewById(R.id.iv_icon); + tvName = (TextView) view.findViewById(R.id.tv_name); + tvPackage = (TextView) view.findViewById(R.id.tv_package); + tvVersion = (TextView) view.findViewById(R.id.tv_version); + tvVersionCode = (TextView) view.findViewById(R.id.tv_version_code); + + tvMaxSdkVersion = (TextView) view.findViewById(R.id.tv_maxSdkVersion); + tvMinSdkVersion = (TextView) view.findViewById(R.id.tv_minSdkVersion); + tvTargetSdkVersion = (TextView) view.findViewById(R.id.tv_targetSdkVersion); + tvInstallLocation = (TextView) view.findViewById(R.id.tv_installLocation); + } + + @Override + protected void onBindView(AppMetaCompat apkMeta) { + Bitmap bitmap = BitmapFactory.decodeByteArray(apkMeta.appEntity.getAppIconData(),0,apkMeta.appEntity.getAppIconData().length); + ivIcon.setImageBitmap(bitmap); + tvName.setText(apkMeta.appEntity.getAppName()); + + tvVersion.setText(apkMeta.appEntity.getVersionName()); + tvPackage.setText(apkMeta.appEntity.getPackageName()); + + tvVersionCode.setText("versionCode: "+apkMeta.appEntity.getVersionCode()); + if(TextUtils.isEmpty(apkMeta.maxSdkVersion)){ + tvMaxSdkVersion.setVisibility(View.GONE); + }else{ + tvMaxSdkVersion.setText("maxSdkVersion: "+apkMeta.maxSdkVersion); + } + tvMinSdkVersion.setText("minSdkVersion: "+apkMeta.minSdkVersion); + tvTargetSdkVersion.setText("targetSdkVersion: "+apkMeta.targetSdkVersion); + tvInstallLocation.setText("installLocation: "+apkMeta.installLocation); + } + +} diff --git a/app/src/main/java/com/gudong/appkit/ui/controller/AppComponentViewController.java b/app/src/main/java/com/gudong/appkit/ui/controller/AppComponentViewController.java new file mode 100644 index 0000000..b16be07 --- /dev/null +++ b/app/src/main/java/com/gudong/appkit/ui/controller/AppComponentViewController.java @@ -0,0 +1,76 @@ +package com.gudong.appkit.ui.controller; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gudong.appkit.R; +import com.jaredrummler.apkparser.model.AndroidComponent; + +import java.util.List; + +import name.gudong.viewcontroller.ViewController; + + +public class AppComponentViewController extends ViewController> { + public static final int KEY_ACTIVITY = 1; + public static final int KEY_SERVICE = 2; + public static final int KEY_PROVIDER = 3; + public static final int KEY_RECEIVER = 4; + + private final LinearLayout.LayoutParams params; + private android.widget.LinearLayout llRoot; + private TextView tvType; + private int mType; + public AppComponentViewController(Context context,int type) { + super(context); + this.mType = type; + params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.topMargin = (int) getContext().getResources().getDimension(R.dimen.dp_6); + } + + @Override + protected int resLayoutId() { + return R.layout.vc_layout_app_activity; + } + + @Override + protected void onCreatedView(View view) { + llRoot = (LinearLayout) view.findViewById(R.id.ll_root_activity); + tvType = (TextView) view.findViewById(R.id.tv_type); + switch (mType){ + case KEY_ACTIVITY: + tvType.setText("Activitys"); + break; + case KEY_SERVICE: + tvType.setText("Services"); + break; + case KEY_RECEIVER: + tvType.setText("Receivers"); + break; + case KEY_PROVIDER: + tvType.setText("Providers"); + break; + } + } + + @Override + protected void onBindView(List data) { + if(data.isEmpty()){ + getView().setVisibility(View.GONE); + }else{ + for(AndroidComponent component:data){ + TextView text = new TextView(getContext()); + text.setText(component.name); + llRoot.addView(text,params); + } + } + + } + + private void initView(View view) { + + } +} diff --git a/app/src/main/java/com/gudong/appkit/ui/controller/AppPermissionViewController.java b/app/src/main/java/com/gudong/appkit/ui/controller/AppPermissionViewController.java new file mode 100644 index 0000000..3199636 --- /dev/null +++ b/app/src/main/java/com/gudong/appkit/ui/controller/AppPermissionViewController.java @@ -0,0 +1,46 @@ +package com.gudong.appkit.ui.controller; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gudong.appkit.R; + +import java.util.List; + +import name.gudong.viewcontroller.ViewController; + + +public class AppPermissionViewController extends ViewController> { + + private LinearLayout llRoot; + private LinearLayout.LayoutParams params; + + public AppPermissionViewController(Context context) { + super(context); + params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.topMargin = (int) getContext().getResources().getDimension(R.dimen.dp_6); + } + + @Override + protected int resLayoutId() { + return R.layout.vc_layout_app_permission; + } + + @Override + protected void onCreatedView(View view) { + llRoot = (LinearLayout) view.findViewById(R.id.ll_root); + } + + @Override + protected void onBindView(List strings) { + for(String permission:strings){ + TextView text = new TextView(getContext()); + text.setText(permission); + llRoot.addView(text,params); + } + } + +} diff --git a/app/src/main/java/com/gudong/appkit/ui/fragment/AppListFragment.java b/app/src/main/java/com/gudong/appkit/ui/fragment/AppListFragment.java index 6bd74dd..772c096 100644 --- a/app/src/main/java/com/gudong/appkit/ui/fragment/AppListFragment.java +++ b/app/src/main/java/com/gudong/appkit/ui/fragment/AppListFragment.java @@ -55,7 +55,7 @@ import com.gudong.appkit.event.PermissionException; import com.gudong.appkit.event.RxBus; import com.gudong.appkit.event.RxEvent; -import com.gudong.appkit.ui.activity.AppActivity; +import com.gudong.appkit.ui.activity.AppOperateActivity; import com.gudong.appkit.ui.activity.BaseActivity; import com.gudong.appkit.ui.control.NavigationManager; import com.gudong.appkit.utils.ActionUtil; @@ -419,12 +419,12 @@ public void onClickMenuItem(int itemId, AppEntity entity) { @Override public void onClickListItemContent(View view, AppEntity entity) { - Intent intent = new Intent(getContext(), AppActivity.class); - intent.putExtra(AppActivity.EXTRA_APP_ENTITY, entity); + Intent intent = new Intent(getContext(), AppOperateActivity.class); + intent.putExtra(AppOperateActivity.EXTRA_APP_ENTITY, entity); ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation( getActivity(), new Pair(view.findViewById(R.id.iv_icon), - AppActivity.VIEW_NAME_HEADER_IMAGE)); + AppOperateActivity.VIEW_NAME_HEADER_IMAGE)); // Now we can start the Activity, providing the activity options as a bundle ActivityCompat.startActivity(getActivity(), intent, activityOptions.toBundle()); diff --git a/app/src/main/res/drawable/bg_card.xml b/app/src/main/res/drawable/bg_card.xml new file mode 100644 index 0000000..7dca052 --- /dev/null +++ b/app/src/main/res/drawable/bg_card.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_app_info.xml b/app/src/main/res/layout/activity_app_info.xml new file mode 100644 index 0000000..68b8290 --- /dev/null +++ b/app/src/main/res/layout/activity_app_info.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/vc_layout_app_activity.xml b/app/src/main/res/layout/vc_layout_app_activity.xml new file mode 100644 index 0000000..510f73a --- /dev/null +++ b/app/src/main/res/layout/vc_layout_app_activity.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/app/src/main/res/layout/vc_layout_app_basic.xml b/app/src/main/res/layout/vc_layout_app_basic.xml new file mode 100644 index 0000000..33e74a1 --- /dev/null +++ b/app/src/main/res/layout/vc_layout_app_basic.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/vc_layout_app_permission.xml b/app/src/main/res/layout/vc_layout_app_permission.xml new file mode 100644 index 0000000..8e9135c --- /dev/null +++ b/app/src/main/res/layout/vc_layout_app_permission.xml @@ -0,0 +1,26 @@ + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9d3b9c9..743a2f4 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -20,4 +20,7 @@ #000 #242424 + + #ffffff + #10000000 \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 5c2f602..06c44fc 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -21,4 +21,7 @@ 14sp 12sp + 16dp + 10dp + diff --git a/gradle.properties b/gradle.properties index 2b67163..1c2510e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,8 +17,8 @@ systemProp.http.proxyPort=1080 VERSION_NAME=0.9-beta VERSION_CODE=16 ANDROID_BUILD_SDK_MIN_VERSION=14 -ANDROID_BUILD_TARGET_SDK_VERSION=24 -ANDROID_BUILD_TOOLS_VERSION=24.0.2 +ANDROID_BUILD_TARGET_SDK_VERSION=25 +ANDROID_BUILD_TOOLS_VERSION=25.0.0 GROUP=com.gudong.appkit -ANDROID_COMPILE_SDK_VERSION=24 +ANDROID_COMPILE_SDK_VERSION=25 systemProp.http.proxyHost=127.0.0.1 diff --git a/library/build.gradle b/library/build.gradle index 6072f79..aa2d268 100755 --- a/library/build.gradle +++ b/library/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' android { compileSdkVersion Integer.parseInt(project.ANDROID_COMPILE_SDK_VERSION) - buildToolsVersion '23.0.2' + buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION defaultConfig { minSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_MIN_VERSION) targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION) @@ -10,5 +10,5 @@ android { } dependencies{ - compile 'com.android.support:appcompat-v7:23.2.0' + compile "com.android.support:appcompat-v7:$project.ANDROID_BUILD_TOOLS_VERSION" } \ No newline at end of file