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