diff --git a/app/build.gradle b/app/build.gradle index 8ada73c..540c4e9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,10 +15,10 @@ android { buildToolsVersion "29.0.3" defaultConfig { applicationId "com.appstore.uiui" - minSdkVersion 23 + minSdkVersion 24 targetSdkVersion 29 - versionCode 31 - versionName "1.3.1" + versionCode 35 + versionName "1.3.5" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" //极光 ndk { @@ -38,6 +38,14 @@ android { } //签名 signingConfigs { + zhanRui { + storeFile file("src/keys/zhanxun.keystore") + storePassword "123456" + keyAlias "zhanxun" + keyPassword "123456" + v1SigningEnabled true + v2SigningEnabled true + } debug { storeFile file("src/keys/xueshibaoos.jks") storePassword "123456" @@ -55,9 +63,21 @@ android { } buildTypes { + zhanRuiRelease.initWith(release) + zhanRuiRelease { + buildConfigField "String", "platform", '"ZhanRui"' + signingConfig signingConfigs.zhanRui + } + + zhanRuiDebug.initWith(debug) + zhanRuiDebug { + versionNameSuffix "-debug" + buildConfigField "String", "platform", '"ZhanRui"' + debuggable true + signingConfig signingConfigs.zhanRui + } debug { - // 显示Log - buildConfigField "boolean", "LOG_DEBUG", "true" + buildConfigField "String", "platform", '"MTK"' versionNameSuffix "-debug" minifyEnabled false //Zipalign优化 @@ -66,15 +86,14 @@ android { applicationVariants.all { variant -> variant.outputs.each { output -> if (outputFile != null) { - def fileName = "${appName()}-V${defaultConfig.versionName}-${releaseTime()}.apk" + def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk" output.outputFileName = fileName } } } } release { - // 不显示Log - buildConfigField "boolean", "LOG_DEBUG", "false" + buildConfigField "String", "platform", '"MTK"' //混淆 minifyEnabled false //Zipalign优化 @@ -88,9 +107,8 @@ android { variant.outputs.each { output -> def outputFile = "" if (outputFile != null) { - def fileName = "${appName()}-${defaultConfig.versionCode}-V${defaultConfig.versionName}-${releaseTime()}.apk" + def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk" output.outputFileName = new File(outputFile, fileName) - } } } diff --git a/app/src/keys/zhanxun.keystore b/app/src/keys/zhanxun.keystore new file mode 100644 index 0000000..7c46fbc Binary files /dev/null and b/app/src/keys/zhanxun.keystore differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cd61141..bf7d8f1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" package="com.appstore.uiui" android:sharedUserId="android.uid.system"> + + @@ -23,7 +25,7 @@ list = new ArrayList() {{ - this.add(appInfo.getApp_preview1()); - this.add(appInfo.getApp_preview2()); - this.add(appInfo.getApp_preview3()); - }}; - imageAdapter = new ImageAdapter(list); - rv_image.setAdapter(imageAdapter); rv_image.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); CustomSnapHelper snapHelper = new CustomSnapHelper(); snapHelper.attachToRecyclerView(rv_image); + setImage(appInfo); final boolean installed = ApkUtils.isInstalled(DetailsActivity.this, appInfo.getApp_package()); final boolean update = ApkUtils.isUpdate(DetailsActivity.this, appInfo.getApp_package(), appInfo.getApp_version_code()); if (installed) { @@ -163,6 +173,72 @@ public class DetailsActivity extends BaseActivity { }); } + private void setImage(final AppInfo info) { + List list = new ArrayList() {{ + this.add(info.getApp_preview1()); + this.add(info.getApp_preview2()); + this.add(info.getApp_preview3()); + }}; + imageAdapter = new ImageAdapter(); + imageAdapter.setData(list); + rv_image.setAdapter(imageAdapter); + + } + + + void getPackageApp(String packageName, long versionCode) { + NetInterfaceManager.getInstance() + .getQueryPackageAppControl() + .getPackageApp(packageName, versionCode) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG, "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse appInfoBaseResponse) { + if (appInfoBaseResponse.code == 200) { + AppInfo info = appInfoBaseResponse.data; + boolean haveImage = false; + if (!TextUtils.isEmpty(info.getApp_preview1())) { + appInfo.setApp_preview1(info.getApp_preview1()); + haveImage = true; + } + if (!TextUtils.isEmpty(info.getApp_preview2())) { + appInfo.setApp_preview2(info.getApp_preview2()); + haveImage = true; + } + if (!TextUtils.isEmpty(info.getApp_preview3())) { + appInfo.setApp_preview3(info.getApp_preview3()); + haveImage = true; + } + appInfo.setApp_version_name(info.getApp_version_name()); + if (haveImage) { + scrollView.setVisibility(View.VISIBLE); + } else { + scrollView.setVisibility(View.GONE); + } + setImage(appInfo); + } else { + scrollView.setVisibility(View.GONE); + } + } + + @Override + public void onError(Throwable e) { + Log.e(TAG, "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e(TAG, "onComplete: "); + } + }); + } + void refresh(DownloadTask task) { if (appInfo.getApp_url().equals(task.getEntity().getUrl())) { switch (task.getState()) { diff --git a/app/src/main/java/com/appstore/uiui/activity/LocalManagerActivity.java b/app/src/main/java/com/appstore/uiui/activity/LocalManagerActivity.java index bb1bed7..1bc480f 100644 --- a/app/src/main/java/com/appstore/uiui/activity/LocalManagerActivity.java +++ b/app/src/main/java/com/appstore/uiui/activity/LocalManagerActivity.java @@ -11,6 +11,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.provider.Settings; import android.view.View; import android.widget.ImageView; @@ -19,6 +20,7 @@ import com.appstore.uiui.adapter.LocalAppAdapter; import com.appstore.uiui.base.BaseActivity; import com.appstore.uiui.base.RefreshManager; import com.appstore.uiui.bean.LocalApp; +import com.appstore.uiui.utils.ApkUtils; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnRefreshListener; @@ -80,7 +82,7 @@ public class LocalManagerActivity extends BaseActivity implements RefreshManager Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); List resolveInfoList = getApplication().getPackageManager().queryIntentActivities(intent, 0); - + String qch_force_app = Settings.System.getString(getContentResolver(), "qch_force_app"); for (int i = 0; i < resolveInfoList.size(); i++) { LocalApp bean = new LocalApp(); bean.setAppName(resolveInfoList.get(i).loadLabel(getApplicationContext().getPackageManager()).toString()); @@ -88,10 +90,17 @@ public class LocalManagerActivity extends BaseActivity implements RefreshManager if (packageName.equals(getApplicationContext().getPackageName()) || packageName.equals("com.android.uiuios")) { continue; } + if (ApkUtils.canremove_systemapp.contains(packageName)) { + continue; + } bean.setPackageName(packageName); Drawable icon = resolveInfoList.get(i).loadIcon(getApplicationContext().getPackageManager()); bean.setIcon(icon); - + if (qch_force_app.contains(packageName)){ + bean.setCanUnintall(false); + }else { + bean.setCanUnintall(true); + } try { PackageInfo packageInfo = getApplicationContext().getPackageManager().getPackageInfo(packageName, 0); String versionCode = getApplicationContext().getPackageManager() diff --git a/app/src/main/java/com/appstore/uiui/activity/MainActivity.java b/app/src/main/java/com/appstore/uiui/activity/MainActivity.java index 2b1afdc..092897b 100644 --- a/app/src/main/java/com/appstore/uiui/activity/MainActivity.java +++ b/app/src/main/java/com/appstore/uiui/activity/MainActivity.java @@ -34,7 +34,7 @@ import com.appstore.uiui.fragment.ManageFragment; import com.appstore.uiui.jpush.ExampleUtil; import com.appstore.uiui.jpush.LocalBroadcastManager; import com.appstore.uiui.jpush.TagAliasOperatorHelper; -import com.appstore.uiui.network.NetWorkManager; +import com.appstore.uiui.network.NetInterfaceManager; import com.appstore.uiui.network.api.QueryAllApp; import com.appstore.uiui.network.api.SNInfo; import com.appstore.uiui.service.GuardService; @@ -71,6 +71,7 @@ import static com.appstore.uiui.jpush.TagAliasOperatorHelper.TagAliasBean; import static com.appstore.uiui.jpush.TagAliasOperatorHelper.sequence; public class MainActivity extends BaseActivity { + private static final String TAG = MainActivity.class.getSimpleName(); private RelativeLayout search_layout; private ImageView iv_download, iv_appicon; private SlidingTabLayout mSlidingTabLayout; @@ -82,7 +83,7 @@ public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Log.e("MainActivity", "onCreate"); + Log.e(TAG, "onCreate"); requestPermission(); registerMessageReceiver(); // used for receive msg String rid = JPushInterface.getRegistrationID(getApplicationContext()); @@ -119,13 +120,13 @@ public class MainActivity extends BaseActivity { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); - Log.e("MainActivity", "onConfigurationChanged"); + Log.e(TAG, "onConfigurationChanged"); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - Log.e("MainActivity", "onSaveInstanceState"); + Log.e(TAG, "onSaveInstanceState"); } @@ -379,9 +380,6 @@ public class MainActivity extends BaseActivity { } - private static final String TAG = "fanhuitong"; - - @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { @@ -403,8 +401,7 @@ public class MainActivity extends BaseActivity { synchronized private void getUserInfo() { - final SNInfo userInfo = NetWorkManager.getuserInfoControl(); - userInfo.getUserinfo(Utils.getSerial()) + NetInterfaceManager.getInstance().getuserInfoControl().getUserinfo(Utils.getSerial()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer>() { @@ -443,8 +440,7 @@ public class MainActivity extends BaseActivity { private void getAllAppPackageName() { - QueryAllApp allApp = NetWorkManager.getQueryAllAppControl(); - allApp.getAllApp(Utils.getSerial()) + NetInterfaceManager.getInstance().getQueryAllAppControl().getAllApp(Utils.getSerial()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer>>() { diff --git a/app/src/main/java/com/appstore/uiui/activity/SearcherActivity.java b/app/src/main/java/com/appstore/uiui/activity/SearcherActivity.java index 47fcbd4..8669b98 100644 --- a/app/src/main/java/com/appstore/uiui/activity/SearcherActivity.java +++ b/app/src/main/java/com/appstore/uiui/activity/SearcherActivity.java @@ -1,13 +1,17 @@ package com.appstore.uiui.activity; -import android.graphics.Color; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.KeyEvent; import android.view.View; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.appcompat.widget.SearchView; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -15,17 +19,28 @@ import com.appstore.uiui.R; import com.appstore.uiui.adapter.AppAdapter; import com.appstore.uiui.base.BaseActivity; import com.appstore.uiui.bean.AppInfo; -import com.appstore.uiui.utils.LogUtils; +import com.appstore.uiui.bean.BaseResponse; +import com.appstore.uiui.network.NetInterfaceManager; +import com.appstore.uiui.network.api.QueryAllApp; +import com.appstore.uiui.network.api.SearchApp; +import com.appstore.uiui.utils.Utils; import java.util.ArrayList; import java.util.List; +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + public class SearcherActivity extends BaseActivity { - private SearchView search; + private String TAG = SearcherActivity.class.getSimpleName(); + // private SearchView search; private List mAppInfoList = new ArrayList<>(); private RecyclerView recyclerView; private AppAdapter madapter; + private EditText edit_search; @Override protected int setLayoutResourceID() { @@ -35,17 +50,21 @@ public class SearcherActivity extends BaseActivity { @Override protected void initView() { - search = findViewById(R.id.search); +// search = findViewById(R.id.search); // int id = search.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); - TextView textView = search.findViewById(androidx.appcompat.R.id.search_src_text); - textView.setTextColor(Color.BLACK); - textView.setHintTextColor(Color.GRAY);//提示字体颜色** +// TextView textView = search.findViewById(androidx.appcompat.R.id.search_src_text); +// textView.setTextColor(Color.BLACK); +// textView.setHintTextColor(Color.GRAY);//提示字体颜色** + edit_search = findViewById(R.id.edit_search); + edit_search.setImeOptions(EditorInfo.IME_ACTION_SEARCH); + edit_search.setInputType(EditorInfo.TYPE_CLASS_TEXT); + recyclerView = findViewById(R.id.recyclerView); } @Override protected void initData() { - madapter = new AppAdapter(mAppInfoList, SearcherActivity.this); + madapter = new AppAdapter(mAppInfoList, SearcherActivity.this); madapter.setHasStableIds(true); recyclerView.setAdapter(madapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); @@ -53,23 +72,113 @@ public class SearcherActivity extends BaseActivity { @Override protected void setListener() { - search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { +// search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { +// @Override +// public boolean onQueryTextSubmit(String query) { +// LogUtils.e("icon_serach", query); +//// OKGO.searchAppbyName(handler, query); +// return false; +// } +// +// @Override +// public boolean onQueryTextChange(String newText) { +// madapter.setData(new ArrayList()); +// madapter.notifyDataSetChanged(); +// return false; +// } +// }); + edit_search.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override - public boolean onQueryTextSubmit(String query) { - LogUtils.e("icon_serach", query); -// OKGO.searchAppbyName(handler, query); - return false; - } - - @Override - public boolean onQueryTextChange(String newText) { - madapter.setData(new ArrayList()); - madapter.notifyDataSetChanged(); + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_SEND || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + //do something; + ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)) + .hideSoftInputFromWindow(SearcherActivity.this.getCurrentFocus() + .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + String text = edit_search.getText().toString(); + if (TextUtils.isEmpty(text)) { + getAllAppPackageName(); + } else { + searcheApp(text); + } + return true; + } return false; } }); } + private void searcheApp(String text) { + NetInterfaceManager.getInstance() + .getSearchAppControl() + .getApp(Utils.getSerial(), text) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseResponse> listBaseResponse) { + if (listBaseResponse.code == 200) { + List appInfos = listBaseResponse.data; + if (appInfos != null && appInfos.size() > 0) { + madapter.setData(listBaseResponse.data); + } + } else { + madapter.setData(new ArrayList()); + } + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + } + + private void getAllAppPackageName() { + NetInterfaceManager.getInstance().getQueryAllAppControl().getAllApp(Utils.getSerial()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG, "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse> listBaseResponse) { + if (listBaseResponse.code == 200) { + List appInfos = listBaseResponse.data; + if (appInfos != null && appInfos.size() > 0) { + madapter.setData(listBaseResponse.data); + } + } else { + madapter.setData(new ArrayList()); + } + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + } + + public void finish(View view) { finish(); } diff --git a/app/src/main/java/com/appstore/uiui/adapter/AppAdapter.java b/app/src/main/java/com/appstore/uiui/adapter/AppAdapter.java index 8d00da9..f3ebf9c 100644 --- a/app/src/main/java/com/appstore/uiui/adapter/AppAdapter.java +++ b/app/src/main/java/com/appstore/uiui/adapter/AppAdapter.java @@ -84,16 +84,16 @@ public class AppAdapter extends RecyclerView.Adapter { if (installed) { if (update) { holder.btnDownLoad.setText("更新"); - holder.btnDownLoad.setTextColor(mContext.getColor(R.color.default_color)); + holder.btnDownLoad.setTextColor(mContext.getColor(R.color.default_text_color)); holder.btnDownLoad.setBackground(mContext.getDrawable(R.drawable.btn_shap_download)); } else { holder.btnDownLoad.setText("打开"); - holder.btnDownLoad.setTextColor(mContext.getColor(R.color.default_color)); - holder.btnDownLoad.setBackground(mContext.getDrawable(R.drawable.btn_shap_download)); + holder.btnDownLoad.setTextColor(mContext.getColor(R.color.white)); + holder.btnDownLoad.setBackground(mContext.getDrawable(R.drawable.btn_shap_open)); } } else { holder.btnDownLoad.setText("安装"); - holder.btnDownLoad.setTextColor(mContext.getColor(R.color.default_color)); + holder.btnDownLoad.setTextColor(mContext.getColor(R.color.default_text_color)); holder.btnDownLoad.setBackground(mContext.getDrawable(R.drawable.btn_shap_download)); if (null != mDownloadTask) { if (mDownloadTask.getKey().equals(appInfo.getApp_url())) { diff --git a/app/src/main/java/com/appstore/uiui/adapter/ImageAdapter.java b/app/src/main/java/com/appstore/uiui/adapter/ImageAdapter.java index ae20c09..3754315 100644 --- a/app/src/main/java/com/appstore/uiui/adapter/ImageAdapter.java +++ b/app/src/main/java/com/appstore/uiui/adapter/ImageAdapter.java @@ -22,6 +22,8 @@ public class ImageAdapter extends RecyclerView.Adapter mSrcList; private Context mContext; + public ImageAdapter() { + } public ImageAdapter(List mSrcList) { this.mSrcList = mSrcList; @@ -44,6 +46,11 @@ public class ImageAdapter extends RecyclerView.Adapter data) { + this.mSrcList = data; + notifyDataSetChanged(); + } + static class ImageViewHolder extends RecyclerView.ViewHolder { ImageView imageView; diff --git a/app/src/main/java/com/appstore/uiui/adapter/LocalAppAdapter.java b/app/src/main/java/com/appstore/uiui/adapter/LocalAppAdapter.java index 795160e..475beae 100644 --- a/app/src/main/java/com/appstore/uiui/adapter/LocalAppAdapter.java +++ b/app/src/main/java/com/appstore/uiui/adapter/LocalAppAdapter.java @@ -1,11 +1,8 @@ package com.appstore.uiui.adapter; -import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; -import android.net.Uri; import android.text.format.Formatter; import android.view.LayoutInflater; import android.view.View; @@ -14,11 +11,9 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; -import androidx.cardview.widget.CardView; import androidx.recyclerview.widget.RecyclerView; import com.appstore.uiui.R; -import com.appstore.uiui.bean.AppInfo; import com.appstore.uiui.bean.GlideCircleWithBorder; import com.appstore.uiui.bean.LocalApp; import com.appstore.uiui.utils.ApkUtils; @@ -60,12 +55,23 @@ public class LocalAppAdapter extends RecyclerView.Adapter" + appInfo.getNewVersionName()); holder.btnDownLoad.setText("更新"); holder.btnDownLoad.setTextColor(context.getColor(R.color.red)); - holder.btnDownLoad.setBackground(context.getDrawable(R.drawable.btn_style_none)); + holder.btnDownLoad.setBackground(context.getDrawable(R.drawable.btn_shap_open)); holder.btnDownLoad.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -96,7 +96,7 @@ public class UpdateAppAdapter extends RecyclerView.Adapter mViewPager; - private ImageView imageView; + private ImageView imageView, iv_banner; private List appInfoList;// private List newAppInfoList = new ArrayList<>(); private AppAdapter adapter; @@ -68,7 +72,6 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager private installReceiver myReceiver; private Context mContext; - private String TAG = "FeaturedFragment"; public FeaturedFragment() { @@ -159,6 +162,7 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager ((SimpleItemAnimator) mRvResult.getItemAnimator()).setSupportsChangeAnimations(false); // mRvResult.setItemAnimator(null); imageView = view.findViewById(R.id.imageView); + iv_banner = view.findViewById(R.id.iv_banner); mRefreshLayout = view.findViewById(R.id.featured_refresh_layout); RefreshManager.getInstance().register(this); mViewPager = view.findViewById(R.id.banner_view); @@ -193,9 +197,43 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager // OKGO.getAllAppInfo(handler); getAllAppInfo(); // OKGO.getBannerImg(handler); - getBannerImg(); +// getBannerImg(); + getBanner(); } + private void getBanner() { + NetInterfaceManager.getInstance().getBannerObservable() + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + Log.e("getBanner", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse bannerBaseResponse) { + Log.e("getBanner", "onNext: "); + if (bannerBaseResponse.code == 200) { + String imgURL = bannerBaseResponse.data.getBanner_img(); + Glide.with(iv_banner).load(imgURL).into(iv_banner); + } else { + + } + } + + @Override + public void onError(Throwable e) { + Log.e("getBanner", "onError: " + e.getMessage()); + + } + + @Override + public void onComplete() { + Log.e("getBanner", "onComplete: "); + + } + }); + + } @Override public void onRefresh() { @@ -208,8 +246,7 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager private void getAllAppInfo() { - QueryAllApp allApp = NetWorkManager.getQueryAllAppControl(); - allApp.getAllApp(Utils.getSerial()) + NetInterfaceManager.getInstance().getQueryAllAppControl().getAllApp(Utils.getSerial()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer>>() { @@ -237,6 +274,7 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager @Override public void onError(@NonNull Throwable e) { Log.e("getAllAppInfo", "onError: " + e.getMessage()); + onComplete(); } @Override @@ -247,14 +285,15 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager } private void getBannerImg() { - BannerImage bannerImage = NetWorkManager.getBannerImageControl(); - bannerImage.getImageURL(Utils.getSerial()) + NetInterfaceManager.getInstance() + .getBannerImageControl() + .getImageURL(Utils.getSerial()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer>>() { @Override public void onSubscribe(@NonNull Disposable d) { - + Log.e("getBannerImg", "onSubscribe: "); } @Override @@ -262,7 +301,7 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager int code = listBaseResponse.code; if (code == 200) { List urlList = listBaseResponse.data; - if (null != urlList || urlList.size() != 0) { + if (null != urlList && urlList.size() != 0) { List list = new ArrayList<>(); for (ImageUrl url : urlList) { list.add(url.getImg_url()); @@ -286,17 +325,30 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager }) .setInterval(5000) .create(list); + mViewPager.setVisibility(View.VISIBLE); + iv_banner.setVisibility(View.GONE); + + } else { + iv_banner.setVisibility(View.VISIBLE); + mViewPager.setVisibility(View.GONE); } + } else { + iv_banner.setVisibility(View.VISIBLE); + mViewPager.setVisibility(View.GONE); } } @Override public void onError(@NonNull Throwable e) { Log.e("getBannerImg", "onError: " + e.getMessage()); + iv_banner.setVisibility(View.VISIBLE); + mViewPager.setVisibility(View.GONE); + onComplete(); } @Override public void onComplete() { + Log.e("getBannerImg", "onComplete: "); mRefreshLayout.finishRefresh(); } }); diff --git a/app/src/main/java/com/appstore/uiui/fragment/ManageFragment.java b/app/src/main/java/com/appstore/uiui/fragment/ManageFragment.java index d7737ec..c9a5b8a 100644 --- a/app/src/main/java/com/appstore/uiui/fragment/ManageFragment.java +++ b/app/src/main/java/com/appstore/uiui/fragment/ManageFragment.java @@ -10,6 +10,7 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.provider.Settings; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -29,6 +30,7 @@ import com.appstore.uiui.bean.UpdateAppInfo; import com.appstore.uiui.utils.ApkUtils; import com.appstore.uiui.utils.ToastUtil; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -42,7 +44,7 @@ public class ManageFragment extends LazyLoadFragment { private RecyclerView mRvLocal; private ImageView iv_nodata; - private TextView manage_tv_updateNum; + private TextView manage_tv_updateNum, manage_tv_appNum; private List localAppList; private List updateAppInfoList; private List applist; @@ -59,6 +61,7 @@ public class ManageFragment extends LazyLoadFragment { @Override public void initViews(View view) { manage_tv_updateNum = view.findViewById(R.id.manage_tv_updateNum); + manage_tv_appNum = view.findViewById(R.id.manage_tv_appNum); manage_cl_localapp = view.findViewById(R.id.manage_cl_localapp); manage_cl_localapp.setOnClickListener(new View.OnClickListener() { @Override @@ -99,6 +102,11 @@ public class ManageFragment extends LazyLoadFragment { super.onStart(); mContext = getActivity(); initAPPData(handler); + List localApps = getLocalApp(); + if (localApps != null && localApps.size() > 0) { + manage_tv_appNum.setText(localApps.size() + ""); + } + } synchronized private void initAPPData(final Handler handler) { @@ -118,7 +126,12 @@ public class ManageFragment extends LazyLoadFragment { bean.setPackageName(packageName); Drawable icon = resolveInfoList.get(i).loadIcon(mContext.getPackageManager()); bean.setIcon(icon); - + if (packageName.equals(mContext.getPackageName()) || packageName.equals("com.android.uiuios")) { + continue; + } + if (ApkUtils.canremove_systemapp.contains(packageName)) { + continue; + } try { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(packageName, 0); String versionCode = mContext.getPackageManager() diff --git a/app/src/main/java/com/appstore/uiui/jpush/MyJPushMessageReceiver.java b/app/src/main/java/com/appstore/uiui/jpush/MyJPushMessageReceiver.java index dcc513d..64253a1 100644 --- a/app/src/main/java/com/appstore/uiui/jpush/MyJPushMessageReceiver.java +++ b/app/src/main/java/com/appstore/uiui/jpush/MyJPushMessageReceiver.java @@ -2,7 +2,7 @@ package com.appstore.uiui.jpush; import android.content.Context; -import com.appstore.uiui.MyApplication; +import com.appstore.uiui.base.BaseApplication; import cn.jpush.android.api.CustomMessage; import cn.jpush.android.api.JPushMessage; @@ -39,6 +39,6 @@ public class MyJPushMessageReceiver extends JPushMessageReceiver { @Override public void onMessage(Context context, CustomMessage customMessage) { super.onMessage(context, customMessage); - MyApplication.getInstance().manageCustomMessage(customMessage); + BaseApplication.getInstance().manageCustomMessage(customMessage); } } diff --git a/app/src/main/java/com/appstore/uiui/network/HTTPInterface.java b/app/src/main/java/com/appstore/uiui/network/HTTPInterface.java index db3a931..08011ad 100644 --- a/app/src/main/java/com/appstore/uiui/network/HTTPInterface.java +++ b/app/src/main/java/com/appstore/uiui/network/HTTPInterface.java @@ -4,29 +4,16 @@ import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; -import android.os.Handler; -import android.os.Message; import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.appstore.uiui.BuildConfig; -import com.appstore.uiui.TextCode.MessageWhat; import com.appstore.uiui.bean.AppInfo; import com.appstore.uiui.bean.BaseResponse; -import com.appstore.uiui.bean.bannerImage; -import com.appstore.uiui.network.URLs.UrlAddress; import com.appstore.uiui.network.api.NewestAppUpdate; -import com.appstore.uiui.network.api.SNInfo; import com.appstore.uiui.utils.FileUtils; -import com.appstore.uiui.utils.LogUtils; -import com.appstore.uiui.utils.SPUtils; -import com.appstore.uiui.utils.ToastUtil; -import com.appstore.uiui.utils.Utils; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import com.appstore.uiui.utils.JGYUtils; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -42,8 +29,9 @@ public class HTTPInterface { public static void checkUpdate(final Context context, String packageName, String versionCode) { - NewestAppUpdate newestAppUpdate = NetWorkManager.getNewestAppUpdateControl(); - newestAppUpdate.getAppUpdate(packageName, versionCode) + NetInterfaceManager.getInstance() + .getNewestAppUpdateControl() + .getAppUpdate(packageName, versionCode, JGYUtils.getInstance().checkAppPlatform()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer>() { diff --git a/app/src/main/java/com/appstore/uiui/network/NetInterfaceManager.java b/app/src/main/java/com/appstore/uiui/network/NetInterfaceManager.java new file mode 100644 index 0000000..1e11b7c --- /dev/null +++ b/app/src/main/java/com/appstore/uiui/network/NetInterfaceManager.java @@ -0,0 +1,123 @@ +package com.appstore.uiui.network; + +import android.content.Context; +import android.os.Environment; + +import com.appstore.uiui.bean.Banner; +import com.appstore.uiui.bean.BaseResponse; +import com.appstore.uiui.network.URLs.UrlAddress; +import com.appstore.uiui.network.api.BannerImage; +import com.appstore.uiui.network.api.DownloadApp; +import com.appstore.uiui.network.api.GetBanner; +import com.appstore.uiui.network.api.NewestAppUpdate; +import com.appstore.uiui.network.api.QueryAllApp; +import com.appstore.uiui.network.api.SNInfo; +import com.appstore.uiui.network.api.SearchApp; +import com.appstore.uiui.network.api.QueryPackageApp; + +import java.io.File; +import java.util.concurrent.TimeUnit; + +import io.reactivex.Observable; +import io.reactivex.Scheduler; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; +import okhttp3.Cache; +import okhttp3.OkHttpClient; +import retrofit2.CallAdapter; +import retrofit2.Converter; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; + +public class NetInterfaceManager { + private static NetInterfaceManager sInstance; + private Context mContext; + private static Retrofit mRetrofit; + + public static final String ROOT_URL = UrlAddress.ROOT_URL; + public static final String HTTP_KEY = "YTM3YTAxNTJmMmZmNzkyM2E2YzIwZjlhZTc0NzNmMGI="; + + private NetInterfaceManager(Context context) { + this.mContext = context; + if (null == mRetrofit) { + mRetrofit = new Retrofit.Builder() + .client(OK_HTTP_CLIENT) + .baseUrl(ROOT_URL) + .addConverterFactory(gsonConverterFactory) + .addCallAdapterFactory(rxJavaCallAdapterFactory) + .build(); + } + } + + public static void init(Context context) { + if (sInstance == null) { + sInstance = new NetInterfaceManager(context); + } + + } + + public static NetInterfaceManager getInstance() { + if (sInstance == null) { + throw new IllegalStateException("You must be init NetworkManager first"); + } + return sInstance; + } + + private static final long cacheSize = 1024 * 1024 * 32;// 缓存文件最大限制大小20M + private static String cacheDirectory = Environment.getExternalStorageDirectory() + "/okttpcaches"; // 设置缓存文件路径 + private static Cache cache = new Cache(new File(cacheDirectory), cacheSize); // + private static final OkHttpClient OK_HTTP_CLIENT; + private static final int timeOut = 5; + + static { + //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.connectTimeout(timeOut, TimeUnit.SECONDS); // 设置连接超时时间 + builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间 + builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间 + builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 + builder.cache(cache);// 设置缓存 + OK_HTTP_CLIENT = builder.build(); + } + + private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJava2CallAdapterFactory.create(); + private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create(); + + public Observable> getBannerObservable() { + return mRetrofit.create(GetBanner.class) + .getBanner() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + + public SNInfo getuserInfoControl() { + return mRetrofit.create(SNInfo.class); + } + + public QueryAllApp getQueryAllAppControl() { + return mRetrofit.create(QueryAllApp.class); + } + + public SearchApp getSearchAppControl() { + return mRetrofit.create(SearchApp.class); + } + + public BannerImage getBannerImageControl() { + return mRetrofit.create(BannerImage.class); + } + + public DownloadApp getDownloadAppControl() { + return mRetrofit.create(DownloadApp.class); + } + + public NewestAppUpdate getNewestAppUpdateControl() { + return mRetrofit.create(NewestAppUpdate.class); + } + + public QueryPackageApp getQueryPackageAppControl() { + return mRetrofit.create(QueryPackageApp.class); + } + +} diff --git a/app/src/main/java/com/appstore/uiui/network/NetWorkManager.java b/app/src/main/java/com/appstore/uiui/network/NetWorkManager.java deleted file mode 100644 index 641f011..0000000 --- a/app/src/main/java/com/appstore/uiui/network/NetWorkManager.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.appstore.uiui.network; - -import android.os.Environment; - -import com.appstore.uiui.network.URLs.UrlAddress; -import com.appstore.uiui.network.api.BannerImage; -import com.appstore.uiui.network.api.DownloadApp; -import com.appstore.uiui.network.api.NewestAppUpdate; -import com.appstore.uiui.network.api.QueryAllApp; -import com.appstore.uiui.network.api.SNInfo; - -import java.io.File; -import java.util.concurrent.TimeUnit; - -import okhttp3.Cache; -import okhttp3.OkHttpClient; -import retrofit2.CallAdapter; -import retrofit2.Converter; -import retrofit2.Retrofit; -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; -import retrofit2.converter.gson.GsonConverterFactory; - -public class NetWorkManager { - - private static final String ROOT_URL = UrlAddress.ROOT_URL; - - private static final long cacheSize = 1024 * 1024 * 20;// 缓存文件最大限制大小20M - private static String cacheDirectory = Environment.getExternalStorageDirectory() + "/okttpcaches"; // 设置缓存文件路径 - private static Cache cache = new Cache(new File(cacheDirectory), cacheSize); // - private static final OkHttpClient client; - - static { - //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 - OkHttpClient.Builder builder = new OkHttpClient.Builder(); - builder.connectTimeout(8, TimeUnit.SECONDS); // 设置连接超时时间 - builder.writeTimeout(8, TimeUnit.SECONDS);// 设置写入超时时间 - builder.readTimeout(8, TimeUnit.SECONDS);// 设置读取数据超时时间 - builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 - builder.cache(cache);// 设置缓存 - client = builder.build(); - } - - private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJava2CallAdapterFactory.create(); - private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create(); - - private static SNInfo userInfoControl; - private static QueryAllApp queryAllAppControl; - private static BannerImage bannerImageControl; - private static DownloadApp downloadAppControl; - private static NewestAppUpdate newestAppUpdateControl; - - - public static SNInfo getuserInfoControl() { - if (null == userInfoControl) { - Retrofit retrofit = new Retrofit.Builder() - .client(client) - .baseUrl(ROOT_URL) - .addConverterFactory(gsonConverterFactory) - .addCallAdapterFactory(rxJavaCallAdapterFactory) - .build(); - userInfoControl = retrofit.create(SNInfo.class); - } - return userInfoControl; - } - - public static QueryAllApp getQueryAllAppControl() { - if (null == queryAllAppControl) { - Retrofit retrofit = new Retrofit.Builder() - .client(client) - .baseUrl(ROOT_URL) - .addConverterFactory(gsonConverterFactory) - .addCallAdapterFactory(rxJavaCallAdapterFactory) - .build(); - queryAllAppControl = retrofit.create(QueryAllApp.class); - } - return queryAllAppControl; - } - - public static BannerImage getBannerImageControl() { - if (null == bannerImageControl) { - Retrofit retrofit = new Retrofit.Builder() - .client(client) - .baseUrl(ROOT_URL) - .addConverterFactory(gsonConverterFactory) - .addCallAdapterFactory(rxJavaCallAdapterFactory) - .build(); - bannerImageControl = retrofit.create(BannerImage.class); - } - return bannerImageControl; - } - - public static DownloadApp getDownloadAppControl() { - if (null == downloadAppControl) { - Retrofit retrofit = new Retrofit.Builder() - .client(client) - .baseUrl(ROOT_URL) - .addConverterFactory(gsonConverterFactory) - .addCallAdapterFactory(rxJavaCallAdapterFactory) - .build(); - downloadAppControl = retrofit.create(DownloadApp.class); - } - return downloadAppControl; - } - - public static NewestAppUpdate getNewestAppUpdateControl() { - if (null == newestAppUpdateControl) { - Retrofit retrofit = new Retrofit.Builder() - .client(client) - .baseUrl(ROOT_URL) - .addConverterFactory(gsonConverterFactory) - .addCallAdapterFactory(rxJavaCallAdapterFactory) - .build(); - newestAppUpdateControl = retrofit.create(NewestAppUpdate.class); - } - return newestAppUpdateControl; - } - -} diff --git a/app/src/main/java/com/appstore/uiui/network/URLs/UrlAddress.java b/app/src/main/java/com/appstore/uiui/network/URLs/UrlAddress.java index c750ea0..18f1f7d 100644 --- a/app/src/main/java/com/appstore/uiui/network/URLs/UrlAddress.java +++ b/app/src/main/java/com/appstore/uiui/network/URLs/UrlAddress.java @@ -3,30 +3,35 @@ package com.appstore.uiui.network.URLs; public class UrlAddress { public final static String ROOT_URL = "http://homework.uiuios.com/android/"; - public final static String GET_ALL_APPINFO = ROOT_URL + "app/queryAllApp"; + public final static String GET_ALL_APPINFO = "app/queryAllApp"; //获取所有应用 - public final static String GET_ALL_RANK = ROOT_URL + "App/rankings"; - //获取所有应用排行 - public final static String GET_APPSEARCHE = ROOT_URL + "App/appSearch"; - //搜索应用 - public final static String GET_INFO_FROMESN = ROOT_URL + "sn/getSnInfo"; - //通过SN获取绑定信息 - public final static String GET_SORT_APP = ROOT_URL + "App/sortApp"; - //app分类查询 - public final static String SET_APP_INSTALL_INFO = ROOT_URL + "App/appInstall"; - //发送app安装信息 - public final static String SET_APP_UNINSTALL_INFO = ROOT_URL + "App/appUnload"; - //发送app卸载信息 - public final static String GET_APP_UPDATE = ROOT_URL + "Update/update"; - //根据包名获取更新 - public final static String GET_BANNER_IMG = ROOT_URL + "app/getBrand"; - //获取banner图 - public final static String GET_ALL_PACKAGENAME = ROOT_URL + "App/allPackageSn"; - //获取所有应用包名 - public final static String GET_SUBClASSFY = ROOT_URL + "Application/getSubClassfy"; - //获取应用分类 - public final static String SEND_DOWNLOADAPP = ROOT_URL + "app/downloadApp"; + public final static String GET_PACKAGE_APP = "app/queryPackageApp"; - public final static String GET_NEWESTAPPUPDATE = ROOT_URL + "app/newestAppUpdate"; + public final static String GET_ALL_RANK = "App/rankings"; + //获取所有应用排行 + public final static String GET_APPSEARCHE = "App/appSearch"; + //搜索应用 + public final static String GET_INFO_FROMESN = "sn/getSnInfo"; + //通过SN获取绑定信息 + public final static String GET_SORT_APP = "App/sortApp"; + //app分类查询 + public final static String SET_APP_INSTALL_INFO = "App/appInstall"; + //发送app安装信息 + public final static String SET_APP_UNINSTALL_INFO = "App/appUnload"; + //发送app卸载信息 + public final static String GET_APP_UPDATE = "Update/update"; + //根据包名获取更新 + public final static String GET_BANNER_IMG = "app/getBrand"; + //获取banner图 + public final static String GET_BANNER = "sn/getBanner"; + + + public final static String GET_ALL_PACKAGENAME = "App/allPackageSn"; + //获取所有应用包名 + public final static String GET_SUBClASSFY = "Application/getSubClassfy"; + //获取应用分类 + public final static String SEND_DOWNLOADAPP = "app/downloadApp"; + + public final static String GET_NEWESTAPPUPDATE = "app/newestAppUpdate"; //根据包名获取更新 } diff --git a/app/src/main/java/com/appstore/uiui/network/api/GetBanner.java b/app/src/main/java/com/appstore/uiui/network/api/GetBanner.java new file mode 100644 index 0000000..fe65f81 --- /dev/null +++ b/app/src/main/java/com/appstore/uiui/network/api/GetBanner.java @@ -0,0 +1,16 @@ +package com.appstore.uiui.network.api; + +import com.appstore.uiui.bean.Banner; +import com.appstore.uiui.bean.BaseResponse; +import com.appstore.uiui.network.URLs.UrlAddress; + +import io.reactivex.Observable; +import retrofit2.http.GET; + +public interface GetBanner { + @GET(UrlAddress.GET_BANNER) + Observable> getBanner( + + ); + +} diff --git a/app/src/main/java/com/appstore/uiui/network/api/NewestAppUpdate.java b/app/src/main/java/com/appstore/uiui/network/api/NewestAppUpdate.java index 872a90d..de98cdb 100644 --- a/app/src/main/java/com/appstore/uiui/network/api/NewestAppUpdate.java +++ b/app/src/main/java/com/appstore/uiui/network/api/NewestAppUpdate.java @@ -14,6 +14,7 @@ public interface NewestAppUpdate { @GET(UrlAddress.GET_NEWESTAPPUPDATE) Observable> getAppUpdate( @Query("packageName") String packageName, - @Query("versionCode") String versionCode + @Query("versionCode") String versionCode, + @Query("type") int type ); } diff --git a/app/src/main/java/com/appstore/uiui/network/api/QueryPackageApp.java b/app/src/main/java/com/appstore/uiui/network/api/QueryPackageApp.java new file mode 100644 index 0000000..1b7b55a --- /dev/null +++ b/app/src/main/java/com/appstore/uiui/network/api/QueryPackageApp.java @@ -0,0 +1,19 @@ +package com.appstore.uiui.network.api; + +import com.appstore.uiui.bean.AppInfo; +import com.appstore.uiui.bean.BaseResponse; +import com.appstore.uiui.network.URLs.UrlAddress; + +import java.util.List; + +import io.reactivex.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface QueryPackageApp { + @GET(UrlAddress.GET_PACKAGE_APP) + Observable> getPackageApp( + @Query("packageName") String packageName, + @Query("versionCode") long versionCode + ); +} diff --git a/app/src/main/java/com/appstore/uiui/network/api/SearchApp.java b/app/src/main/java/com/appstore/uiui/network/api/SearchApp.java new file mode 100644 index 0000000..3e549f4 --- /dev/null +++ b/app/src/main/java/com/appstore/uiui/network/api/SearchApp.java @@ -0,0 +1,19 @@ +package com.appstore.uiui.network.api; + +import com.appstore.uiui.bean.AppInfo; +import com.appstore.uiui.bean.BaseResponse; +import com.appstore.uiui.network.URLs.UrlAddress; + +import java.util.List; + +import io.reactivex.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface SearchApp { + @GET(UrlAddress.GET_ALL_APPINFO) + Observable>> getApp( + @Query("sn") String sn, + @Query("app_name") String app_name + ); +} diff --git a/app/src/main/java/com/appstore/uiui/service/GuardService.java b/app/src/main/java/com/appstore/uiui/service/GuardService.java index d12ab90..c25f9cc 100644 --- a/app/src/main/java/com/appstore/uiui/service/GuardService.java +++ b/app/src/main/java/com/appstore/uiui/service/GuardService.java @@ -27,7 +27,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.appstore.uiui.KeepAliveConnection; import com.appstore.uiui.bean.BaseResponse; -import com.appstore.uiui.network.NetWorkManager; +import com.appstore.uiui.network.NetInterfaceManager; import com.appstore.uiui.network.api.DownloadApp; import com.appstore.uiui.utils.ApkUtils; import com.appstore.uiui.utils.LogUtils; @@ -179,8 +179,9 @@ public class GuardService extends Service { String packageName = jsonObject.getString("app_package"); File file = new File(downloadPath); int admin_id = (int) SPUtils.get(GuardService.this, "admin_id", -1); - DownloadApp downloadApp = NetWorkManager.getDownloadAppControl(); - downloadApp.sendDownloadApp(packageName, file.length(), Utils.getSerial(), admin_id) + NetInterfaceManager.getInstance() + .getDownloadAppControl() + .sendDownloadApp(packageName, file.length(), Utils.getSerial(), admin_id) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { diff --git a/app/src/main/java/com/appstore/uiui/service/InitJpushServer.java b/app/src/main/java/com/appstore/uiui/service/InitJpushServer.java index bdf1777..4f549ca 100644 --- a/app/src/main/java/com/appstore/uiui/service/InitJpushServer.java +++ b/app/src/main/java/com/appstore/uiui/service/InitJpushServer.java @@ -2,11 +2,14 @@ package com.appstore.uiui.service; import android.app.Service; import android.content.Intent; +import android.os.Environment; import android.os.IBinder; import com.appstore.uiui.KeepAliveConnection; import com.appstore.uiui.network.HTTPInterface; +import java.io.File; + public class InitJpushServer extends Service { public InitJpushServer() { } @@ -25,4 +28,16 @@ public class InitJpushServer extends Service { HTTPInterface.checkUpdate(InitJpushServer.this, "com.info.sn"); return START_STICKY; } + + @Override + public void onCreate() { + super.onCreate(); + File file = new File(DOWNLOAD_PATH); + if (file.isFile() || !file.exists()) { + file.delete(); + file.mkdirs(); + } + } + + private final String DOWNLOAD_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + File.separator + "jgy"; } diff --git a/app/src/main/java/com/appstore/uiui/utils/ApkUtils.java b/app/src/main/java/com/appstore/uiui/utils/ApkUtils.java index b074446..dba57cd 100644 --- a/app/src/main/java/com/appstore/uiui/utils/ApkUtils.java +++ b/app/src/main/java/com/appstore/uiui/utils/ApkUtils.java @@ -557,7 +557,7 @@ public class ApkUtils { return uid / PER_USER_RANGE; } - public static boolean checkIsUpdate(Context context, String packageName, int versionCode) { + public static boolean checkIsUpdate(Context context, String packageName, long versionCode) { PackageManager packageManager = context.getPackageManager(); boolean update = false; PackageInfo packageInfo = null; @@ -610,7 +610,7 @@ public class ApkUtils { return info != null; } - public static boolean isUpdate(Context context, String packageName, int versionCode) { + public static boolean isUpdate(Context context, String packageName, long versionCode) { PackageManager pm = context.getPackageManager(); PackageInfo info = null; try { @@ -631,5 +631,15 @@ public class ApkUtils { } } + public static List canremove_systemapp = new ArrayList() {{ + //预置的可以卸载的系统应用,判断出来为第三方 + this.add("com.android.quicksearchbox"); + this.add("com.android.calendar"); + this.add("com.android.dreams.basic"); + this.add("com.android.musicfx"); + this.add("com.android.email"); + this.add("com.jiaoguanyi.sysc"); + }}; + } diff --git a/app/src/main/java/com/appstore/uiui/utils/JGYUtils.java b/app/src/main/java/com/appstore/uiui/utils/JGYUtils.java new file mode 100644 index 0000000..93e57f5 --- /dev/null +++ b/app/src/main/java/com/appstore/uiui/utils/JGYUtils.java @@ -0,0 +1,320 @@ +package com.appstore.uiui.utils; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.ContextWrapper; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.BatteryManager; +import android.os.Build; +import android.os.PowerManager; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; + +import com.appstore.uiui.BuildConfig; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashSet; + + +public class JGYUtils { + private static final String TAG = JGYUtils.class.getSimpleName(); + + private static JGYUtils sInstance; + private Context mContext; + public static int MTKPlatform = 1; + public static int ZhanruiPlatform = 2; + public static int UnknowPlatform = 0; + public static String MTKTag = "MTK"; + public static String ZhanruiTag = "展锐"; + + + private JGYUtils(Context context) { + this.mContext = context; + } + + public static void init(Context context) { + if (sInstance == null) { + sInstance = new JGYUtils(context); + } + } + + public static JGYUtils getInstance() { + if (sInstance == null) { + throw new IllegalStateException("You must be init JGYUtils first"); + } + return sInstance; + } + + public static boolean isOfficialVersion() { + String channelValue = JGYUtils.getInstance().getStringMetaData(); + return "official".equals(channelValue); + } + + public static boolean isNewlyVersion() { + String channelValue = JGYUtils.getInstance().getStringMetaData(); + return "beta".equals(channelValue); + } + + public static boolean isBetaVersion() { + String channelValue = JGYUtils.getInstance().getStringMetaData(); + return "beta".equals(channelValue); + } + + + + private int getBatteryLevel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + BatteryManager batteryManager = (BatteryManager) mContext.getSystemService(Context.BATTERY_SERVICE); + return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); + } else { + Intent intent = new ContextWrapper(mContext).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + return (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) / + intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); + } + } + + + private PowerManager.WakeLock wakeLock = null; + private static final String mWakeLockName = "BackupService"; + + /** + * 获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行 + */ + @SuppressLint("InvalidWakeLockTag") + private synchronized void acquireWakeLock() { + if (null == wakeLock) { + PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK + | PowerManager.ON_AFTER_RELEASE, mWakeLockName); + if (null != wakeLock) { + Log.e("fht", "acquireWakeLock!"); + wakeLock.acquire(); + } + } + } + + /** + * 释放设备电源锁 + */ + private synchronized void releaseWakeLock() { + if (null != wakeLock) { + Log.e("fht", "releaseWakeLock!"); + wakeLock.release(); + wakeLock = null; + } + } + + + /** + * @param ids 需要管控的ID + * @param packages 应用程序包名 + */ + public void writeDeselectIDtoSystem(String ids, String packages) { + if (!TextUtils.isEmpty(ids) && !TextUtils.isEmpty(packages)) { + ArrayList idArrayList = new ArrayList<>(Arrays.asList(ids.split(","))); + ArrayList packageArrayList = new ArrayList<>(Arrays.asList(packages.split(","))); + LinkedHashSet idHashSet = new LinkedHashSet<>(idArrayList); + LinkedHashSet packageHashSet = new LinkedHashSet<>(packageArrayList); + ArrayList idList = new ArrayList<>(idHashSet); + ArrayList packageList = new ArrayList<>(packageHashSet); + StringBuilder idStringBuilder = new StringBuilder(); + for (String id : idList) { + if (idStringBuilder.length() > 0) { + idStringBuilder.append(","); + } + idStringBuilder.append(id); + } + StringBuilder packageStringBuilder = new StringBuilder(); + for (String pkg : packageList) { + if (packageStringBuilder.length() > 0) { + packageStringBuilder.append(","); + } + packageStringBuilder.append(pkg); + } + + + String olddeselectViewArray = Settings.System.getString(mContext.getContentResolver(), "qch_app_forbid_id"); + Log.e("writeDeselectIDtoSystem", "olddeselectViewArray: " + olddeselectViewArray); + + Settings.System.putString(mContext.getContentResolver(), "qch_app_forbid_id", packageStringBuilder.toString()); + Settings.System.putString(mContext.getContentResolver(), "DeselectViewArray", idStringBuilder.toString()); + Log.e("writeDeselectIDtoSystem", "qch_app_forbid_id: " + packageStringBuilder.toString()); + Log.e("writeDeselectIDtoSystem", "deselectViewArray: " + idStringBuilder.toString()); + } else { + Log.e("writeDeselectIDtoSystem", "writeDeselectIDtoSystem is null:"); + Settings.System.putString(mContext.getContentResolver(), "qch_app_forbid_id", ""); + Settings.System.putString(mContext.getContentResolver(), "DeselectViewArray", ""); + } + } + + + + + private static void sendAllweb(Context context) { + Intent intent = new Intent("qch_app_website") + .setPackage("com.android.settings"); + intent.putExtra("package_name", "Invalid"); + context.sendBroadcast(intent); + } + + private static void sendwebUrl(Context context) { + Intent intent = new Intent("qch_app_inside_website") + .setPackage("com.android.settings"); + intent.putExtra("websitelist", "Invalid"); + context.sendBroadcast(intent); + } + + + /** + * 从Manifest中获取meta-data值 + * https://blog.csdn.net/yue_233/article/details/91453451 + * + * @return + */ + public String getStringMetaData() { + ApplicationInfo appInfo = null; + try { + appInfo = mContext.getPackageManager().getApplicationInfo(mContext.getPackageName(), PackageManager.GET_META_DATA); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + String value = appInfo.metaData.getString("CHANNEL_VALUE"); + return value; + } + + public void hookWebView() { + int sdkInt = Build.VERSION.SDK_INT; + try { + Class factoryClass = Class.forName("android.webkit.WebViewFactory"); + Field field = factoryClass.getDeclaredField("sProviderInstance"); + field.setAccessible(true); + Object sProviderInstance = field.get(null); + if (sProviderInstance != null) { + Log.i(TAG, "sProviderInstance isn't null"); + return; + } + + Method getProviderClassMethod; + if (sdkInt > 22) { + getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass"); + } else if (sdkInt == 22) { + getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass"); + } else { + Log.i(TAG, "Don't need to Hook WebView"); + return; + } + getProviderClassMethod.setAccessible(true); + Class factoryProviderClass = (Class) getProviderClassMethod.invoke(factoryClass); + Class delegateClass = Class.forName("android.webkit.WebViewDelegate"); + Constructor delegateConstructor = delegateClass.getDeclaredConstructor(); + delegateConstructor.setAccessible(true); + if (sdkInt < 26) {//低于Android O版本 + Constructor providerConstructor = factoryProviderClass.getConstructor(delegateClass); + if (providerConstructor != null) { + providerConstructor.setAccessible(true); + sProviderInstance = providerConstructor.newInstance(delegateConstructor.newInstance()); + } + } else { + Field chromiumMethodName = factoryClass.getDeclaredField("CHROMIUM_WEBVIEW_FACTORY_METHOD"); + chromiumMethodName.setAccessible(true); + String chromiumMethodNameStr = (String) chromiumMethodName.get(null); + if (chromiumMethodNameStr == null) { + chromiumMethodNameStr = "create"; + } + Method staticFactory = factoryProviderClass.getMethod(chromiumMethodNameStr, delegateClass); + if (staticFactory != null) { + sProviderInstance = staticFactory.invoke(null, delegateConstructor.newInstance()); + } + } + + if (sProviderInstance != null) { + field.set("sProviderInstance", sProviderInstance); + Log.i(TAG, "Hook success!"); + } else { + Log.i(TAG, "Hook failed!"); + } + } catch (Throwable e) { + Log.w(TAG, e); + } + } + + + /** + * 忽略电池优化 + */ + private void ignoreBatteryOptimization(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + + boolean hasIgnored = powerManager.isIgnoringBatteryOptimizations(context.getPackageName()); + // 判断当前APP是否有加入电池优化的白名单,如果没有,弹出加入电池优化的白名单的设置对话框。 + if (!hasIgnored) { + Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); + intent.setData(Uri.parse("package:" + context.getPackageName())); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent); + } + } + } + + + public int checkSNPlatform(String sn) { + String secondChars = sn.substring(1, 2); + if ("N".equalsIgnoreCase(secondChars)) {//MTK平台 + return MTKPlatform; + } else if ("R".equalsIgnoreCase(secondChars)) {//展锐平台 + return ZhanruiPlatform; + } else { + Log.e(TAG, "checkSNPlatform: " + "sn: " + sn + "没有对应平台"); + return UnknowPlatform; + } + } + + public int checkAppPlatform() { + String platform = BuildConfig.platform; + if ("MTK".equalsIgnoreCase(platform)) { + Log.i(TAG, "checkAppPlatform: " + "MTK平台"); + return MTKPlatform; + } else if ("ZhanRui".equalsIgnoreCase(platform)) { + Log.i(TAG, "checkAppPlatform: " + "展锐平台"); + return ZhanruiPlatform; + } else { + Log.i(TAG, "checkAppPlatform: " + "没有数据"); + return UnknowPlatform; + } + } + + public boolean isSamePlatform(String platform) { + String AppPlatform = BuildConfig.platform; + if ("ZhanRui".equals(AppPlatform)) { + return ZhanruiTag.equals(platform); + } else { + return AppPlatform.equals(platform); + } + } + + public interface GetAppPlatformCallback { + void AppPlatform(int platform); + } + + public void getAppPlatform(GetAppPlatformCallback getAppPlatformCallback) { + String platform = BuildConfig.platform; + if ("MTK".equalsIgnoreCase(platform)) { + getAppPlatformCallback.AppPlatform(MTKPlatform); + } else if ("ZhanRui".equalsIgnoreCase(platform)) { + getAppPlatformCallback.AppPlatform(ZhanruiPlatform); + } else { + getAppPlatformCallback.AppPlatform(UnknowPlatform); + } + } +} diff --git a/app/src/main/java/com/appstore/uiui/utils/LogUtils.java b/app/src/main/java/com/appstore/uiui/utils/LogUtils.java index f6700b7..04ea495 100644 --- a/app/src/main/java/com/appstore/uiui/utils/LogUtils.java +++ b/app/src/main/java/com/appstore/uiui/utils/LogUtils.java @@ -6,31 +6,31 @@ import com.appstore.uiui.BuildConfig; public class LogUtils { public static void v(String tag, String msg) { - if (BuildConfig.LOG_DEBUG) { + if (BuildConfig.DEBUG) { Log.v(tag, msg); } } public static void d(String tag, String msg) { - if (BuildConfig.LOG_DEBUG) { + if (BuildConfig.DEBUG) { Log.d(tag, msg); } } public static void i(String tag, String msg) { - if (BuildConfig.LOG_DEBUG) { + if (BuildConfig.DEBUG) { Log.i(tag, msg); } } public static void w(String tag, String msg) { - if (BuildConfig.LOG_DEBUG) { + if (BuildConfig.DEBUG) { Log.w(tag, msg); } } public static void e(String tag, String msg) { - if (BuildConfig.LOG_DEBUG) { + if (BuildConfig.DEBUG) { Log.e(tag, msg); } } diff --git a/app/src/main/java/com/appstore/uiui/utils/ServiceAliveUtils.java b/app/src/main/java/com/appstore/uiui/utils/ServiceAliveUtils.java index 729b39a..4819ac9 100644 --- a/app/src/main/java/com/appstore/uiui/utils/ServiceAliveUtils.java +++ b/app/src/main/java/com/appstore/uiui/utils/ServiceAliveUtils.java @@ -3,14 +3,14 @@ package com.appstore.uiui.utils; import android.app.ActivityManager; import android.content.Context; -import com.appstore.uiui.MyApplication; +import com.appstore.uiui.base.BaseApplication; public class ServiceAliveUtils { public static boolean isServiceAlice() { boolean isServiceRunning = false; ActivityManager manager = - (ActivityManager) MyApplication.getInstance().getAppContext().getSystemService(Context.ACTIVITY_SERVICE); + (ActivityManager) BaseApplication.getInstance().getAppContext().getSystemService(Context.ACTIVITY_SERVICE); if (manager == null) { return true; } diff --git a/app/src/main/java/com/appstore/uiui/utils/ToastUtil.java b/app/src/main/java/com/appstore/uiui/utils/ToastUtil.java index 3b4a475..2da114f 100644 --- a/app/src/main/java/com/appstore/uiui/utils/ToastUtil.java +++ b/app/src/main/java/com/appstore/uiui/utils/ToastUtil.java @@ -51,7 +51,7 @@ public class ToastUtil { mainHandler.post(new Runnable() { @Override public void run() { - if (BuildConfig.LOG_DEBUG) { + if (BuildConfig.DEBUG) { if (toast != null) { toast.setText(msg); toast.show(); diff --git a/app/src/main/res/drawable-xhdpi/appstore_logo.png b/app/src/main/res/drawable-xhdpi/appstore_logo.png index 7d84a41..22f9ce4 100644 Binary files a/app/src/main/res/drawable-xhdpi/appstore_logo.png and b/app/src/main/res/drawable-xhdpi/appstore_logo.png differ diff --git a/app/src/main/res/drawable-xhdpi/banner.png b/app/src/main/res/drawable-xhdpi/banner.png new file mode 100644 index 0000000..d3f0417 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/banner.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_back.png b/app/src/main/res/drawable-xhdpi/ic_back.png index 5db22cb..1806c2a 100644 Binary files a/app/src/main/res/drawable-xhdpi/ic_back.png and b/app/src/main/res/drawable-xhdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_menu_search.png b/app/src/main/res/drawable-xhdpi/ic_menu_search.png index 04571d8..eb43499 100644 Binary files a/app/src/main/res/drawable-xhdpi/ic_menu_search.png and b/app/src/main/res/drawable-xhdpi/ic_menu_search.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_place_holder.png b/app/src/main/res/drawable-xhdpi/ic_place_holder.png index 14be0e9..c84122c 100644 Binary files a/app/src/main/res/drawable-xhdpi/ic_place_holder.png and b/app/src/main/res/drawable-xhdpi/ic_place_holder.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_download_task.png b/app/src/main/res/drawable-xhdpi/icon_download_task.png index a79517a..d5efc58 100644 Binary files a/app/src/main/res/drawable-xhdpi/icon_download_task.png and b/app/src/main/res/drawable-xhdpi/icon_download_task.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_my_task.png b/app/src/main/res/drawable-xhdpi/icon_my_task.png index b0041f2..3ba3886 100644 Binary files a/app/src/main/res/drawable-xhdpi/icon_my_task.png and b/app/src/main/res/drawable-xhdpi/icon_my_task.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_update_task.png b/app/src/main/res/drawable-xhdpi/icon_update_task.png index 1667ae0..065a866 100644 Binary files a/app/src/main/res/drawable-xhdpi/icon_update_task.png and b/app/src/main/res/drawable-xhdpi/icon_update_task.png differ diff --git a/app/src/main/res/drawable/btn_shap_delete.xml b/app/src/main/res/drawable/btn_shap_delete.xml new file mode 100644 index 0000000..717a51b --- /dev/null +++ b/app/src/main/res/drawable/btn_shap_delete.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_shap_open.xml b/app/src/main/res/drawable/btn_shap_open.xml new file mode 100644 index 0000000..6052d58 --- /dev/null +++ b/app/src/main/res/drawable/btn_shap_open.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_style_none.xml b/app/src/main/res/drawable/btn_style_none.xml index ac143e5..0c36e3c 100644 --- a/app/src/main/res/drawable/btn_style_none.xml +++ b/app/src/main/res/drawable/btn_style_none.xml @@ -73,7 +73,7 @@ android:shape="rectangle" android:useLevel="false"> - + diff --git a/app/src/main/res/layout-land/activity_about.xml b/app/src/main/res/layout-land/activity_about.xml index 0d8654b..8f9fba4 100644 --- a/app/src/main/res/layout-land/activity_about.xml +++ b/app/src/main/res/layout-land/activity_about.xml @@ -84,7 +84,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="36dp" - android:text="版权申明" + android:text="回到桌面" android:textColor="@color/default_color" android:textSize="20sp" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout-land/activity_details.xml b/app/src/main/res/layout-land/activity_details.xml index 903a8bd..36e9065 100644 --- a/app/src/main/res/layout-land/activity_details.xml +++ b/app/src/main/res/layout-land/activity_details.xml @@ -42,8 +42,8 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" - android:overScrollMode="never" - android:background="@color/white"> + android:background="@color/white" + android:overScrollMode="never"> + android:textSize="@dimen/sp_16" + android:textStyle="bold" /> + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/dp_2" + android:layout_marginRight="@dimen/dp_15" + android:text="大小" /> + android:textStyle="bold" + android:visibility="gone"> @@ -154,9 +154,9 @@ android:layout_marginTop="@dimen/dp_2" android:layout_marginRight="@dimen/dp_15" android:text="更新" - android:visibility="gone" android:textSize="@dimen/sp_16" - android:textStyle="bold"> + android:textStyle="bold" + android:visibility="gone"> @@ -178,20 +178,22 @@ android:layout_marginTop="@dimen/dp_2" android:layout_marginRight="@dimen/dp_15" android:text="信息" - android:visibility="gone" android:textSize="@dimen/sp_16" - android:textStyle="bold"> + android:textStyle="bold" + android:visibility="gone"> + android:layout_weight="1" + android:gravity="center_vertical" + android:singleLine="true" + android:text="" /> + android:text="版本" + android:visibility="gone" /> + android:text="时间" + android:visibility="gone" /> + android:text="开发者" + android:visibility="gone" /> diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 34320e7..949e47c 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -36,44 +36,42 @@ android:layout_marginStart="20dp" android:layout_marginLeft="20dp" android:layout_marginEnd="20dp" - android:visibility="gone" - android:layout_weight="1"> + android:layout_weight="1" + android:visibility="visible"> + - + + + + + android:background="@drawable/shap_search_right" + android:gravity="center_vertical" + android:text="@string/search_edit" + android:textColor="#a7a5a5"> - - - - - - - - - + + @@ -99,16 +97,17 @@ app:tl_indicator_style="TRIANGLE" app:tl_tab_space_equal="true" app:tl_textBold="SELECT" - app:tl_textsize="@dimen/sp_15" - app:tl_textSelectColor="@color/default_color" - app:tl_textUnselectColor="@color/install" /> + app:tl_textSelectColor="@color/default_text_color" + app:tl_textUnselectColor="@color/install" + app:tl_textsize="@dimen/sp_17" /> + android:layout_weight="1" + android:background="@color/white" + android:overScrollMode="never" /> diff --git a/app/src/main/res/layout-land/fragment_featured.xml b/app/src/main/res/layout-land/fragment_featured.xml index 9aa2067..ad36de7 100644 --- a/app/src/main/res/layout-land/fragment_featured.xml +++ b/app/src/main/res/layout-land/fragment_featured.xml @@ -1,8 +1,8 @@ + + + android:layout_margin="10dp" + android:visibility="gone"/> + + android:layout_height="match_parent" + android:nestedScrollingEnabled="false" + android:overScrollMode="never" /> + - + diff --git a/app/src/main/res/layout-land/item_donwloading.xml b/app/src/main/res/layout-land/item_donwloading.xml index 98c2b3e..0743b65 100644 --- a/app/src/main/res/layout-land/item_donwloading.xml +++ b/app/src/main/res/layout-land/item_donwloading.xml @@ -65,7 +65,7 @@ android:layout_gravity="center_vertical" android:layout_marginStart="10dp" android:layout_marginEnd="20dp" - android:textColor="@color/default_color" - android:background="@drawable/btn_style_none" + android:textColor="@color/white" + android:background="@drawable/btn_shap_open" android:text="开始" /> \ No newline at end of file diff --git a/app/src/main/res/layout-land/item_download_manager.xml b/app/src/main/res/layout-land/item_download_manager.xml index a25bbe1..bc72658 100644 --- a/app/src/main/res/layout-land/item_download_manager.xml +++ b/app/src/main/res/layout-land/item_download_manager.xml @@ -107,8 +107,8 @@ android:layout_height="@dimen/dp_30" android:layout_gravity="center" android:text="暂停" - android:textColor="@color/default_color" - android:background="@drawable/btn_style_none" /> + android:textColor="@color/white" + android:background="@drawable/btn_shap_open" /> diff --git a/app/src/main/res/layout-land/item_image.xml b/app/src/main/res/layout-land/item_image.xml index a1f7746..5214e82 100644 --- a/app/src/main/res/layout-land/item_image.xml +++ b/app/src/main/res/layout-land/item_image.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/layout-land/item_local_app.xml b/app/src/main/res/layout-land/item_local_app.xml index a54d8b9..d9cb013 100644 --- a/app/src/main/res/layout-land/item_local_app.xml +++ b/app/src/main/res/layout-land/item_local_app.xml @@ -60,18 +60,17 @@