diff --git a/app/build.gradle b/app/build.gradle index 79e5b78..6cd03c1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.uiui.os" minSdkVersion 24 targetSdkVersion 29 - versionCode 8 - versionName "1.7" + versionCode 10 + versionName "1.9" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -157,7 +157,7 @@ dependencies { // implementation 'io.reactivex.rxjava2:rxjava:2.2.12' // implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // - implementation 'com.squareup.okhttp3:okhttp:4.9.1' + implementation 'com.squareup.okhttp3:okhttp:4.9.3' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 31e507a..9629519 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,10 +35,33 @@ android:restoreAnyVersion="true" android:supportsRtl="true" android:theme="@style/AppTheme"> + + + + + + + + + + + + + android:launchMode="singleTask" + android:screenOrientation="sensorPortrait" /> + + - - - - - - - - - - - - + + \ No newline at end of file diff --git a/app/src/main/java/com/uiui/os/activity/APPListActivity.java b/app/src/main/java/com/uiui/os/activity/APPListActivity.java index b5a24bf..436eecb 100644 --- a/app/src/main/java/com/uiui/os/activity/APPListActivity.java +++ b/app/src/main/java/com/uiui/os/activity/APPListActivity.java @@ -10,7 +10,6 @@ import android.view.WindowManager; import android.widget.ImageView; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -18,7 +17,7 @@ import com.uiui.os.R; import com.uiui.os.adapter.APPListAdapter; import com.uiui.os.base.BaseActivity; import com.uiui.os.bean.AppListInfo; -import com.uiui.os.utils.APKUtils; +import com.uiui.os.utils.ApkUtils; import com.uiui.os.utils.BitmapUtils; import com.uiui.os.view.RecyclerViewSpacesItemDecoration; @@ -52,7 +51,7 @@ public class APPListActivity extends BaseActivity { @Override public void initData() { - List applicationInfoList = APKUtils.getSystemApp(APPListActivity.this); + List applicationInfoList = ApkUtils.getSystemApp(APPListActivity.this); PackageManager pm = getPackageManager(); if (null != applicationInfoList) { List appinfoList = new ArrayList<>(); diff --git a/app/src/main/java/com/uiui/os/activity/main/MainActivity.java b/app/src/main/java/com/uiui/os/activity/main/MainActivity.java index 4c1a401..392e737 100644 --- a/app/src/main/java/com/uiui/os/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiui/os/activity/main/MainActivity.java @@ -6,7 +6,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; -import android.content.pm.ApplicationInfo; import android.content.res.Configuration; import android.graphics.Color; import android.os.IBinder; @@ -33,7 +32,7 @@ import com.uiui.os.fragment.AppListFragment; import com.uiui.os.fragment.BaseFragmentPagerAdapter; import com.uiui.os.fragment.CustomFragment; import com.uiui.os.fragment.SecondFragment; -import com.uiui.os.utils.APKUtils; +import com.uiui.os.utils.ApkUtils; import com.uiui.os.utils.AppUsedTimeUtils; import com.uiui.os.view.ScaleCircleNavigator; @@ -87,7 +86,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { mFragments.add(mCustomFragment); mMainPresenter.getDesktopLayout(); - ArrayList desktopIcons = APKUtils.queryFilterAppInfo(this); + ArrayList desktopIcons = ApkUtils.queryFilterAppInfo(this); int x = 0; for (int i = 0; i <= desktopIcons.size(); i++) { @@ -184,7 +183,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { private void addData() { List fragmentList = new ArrayList<>(); - ArrayList applicationInfoList = APKUtils.queryFilterAppInfo(this); + ArrayList applicationInfoList = ApkUtils.queryFilterAppInfo(this); int x = 0; for (int i = 0; i <= applicationInfoList.size(); i++) { if (i != 0 && i % APP_LIST_SIZE == 0) { @@ -198,14 +197,15 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); } } - for (int i = 1; i <= fragmentList.size(); i++) { + //从第三个开始改 + for (int i = 2; i <= fragmentList.size(); i++) { if (mFragments.get(i) != null) { - mBaseFragmentPagerAdapter.replaceFragment(i, fragmentList.get(i - 1)); + mBaseFragmentPagerAdapter.replaceFragment(i, fragmentList.get(i - 2)); mFragments.remove(i); - mFragments.add(i, fragmentList.get(i - 1)); + mFragments.add(i, fragmentList.get(i - 2)); } else { - mBaseFragmentPagerAdapter.addFragment(fragmentList.get(i - 1)); - mFragments.add(fragmentList.get(i - 1)); + mBaseFragmentPagerAdapter.addFragment(fragmentList.get(i - 2)); + mFragments.add(fragmentList.get(i - 2)); } } } @@ -299,7 +299,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { String action = intent.getAction(); Log.e(TAG, "onReceive: " + action); if (Intent.ACTION_PACKAGE_ADDED.equals(action) - || Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) { + || Intent.ACTION_PACKAGE_REMOVED.equals(action)) { addData(); } } diff --git a/app/src/main/java/com/uiui/os/activity/main/MainPresenter.java b/app/src/main/java/com/uiui/os/activity/main/MainPresenter.java index 2e1aca5..ab83717 100644 --- a/app/src/main/java/com/uiui/os/activity/main/MainPresenter.java +++ b/app/src/main/java/com/uiui/os/activity/main/MainPresenter.java @@ -11,7 +11,7 @@ import com.uiui.os.BuildConfig; import com.uiui.os.bean.BaseResponse; import com.uiui.os.bean.NetDesktopIcon; import com.uiui.os.network.NetInterfaceManager; -import com.uiui.os.utils.APKUtils; +import com.uiui.os.utils.ApkUtils; import com.uiui.os.utils.AppUsedTimeUtils; import com.uiui.os.utils.Utils; @@ -91,11 +91,11 @@ public class MainPresenter implements MainContact.Presenter { String packagename = AppUsedTimeUtils.getInstance().getAppPackageName(); Log.e(TAG, "onRestart packagename == " + packagename); if (!TextUtils.isEmpty(packagename)) { - Log.e(TAG, "onRestart: " + APKUtils.getAppNameByPackage(mContext, packagename)); + Log.e(TAG, "onRestart: " + ApkUtils.getAppNameByPackage(mContext, packagename)); Log.e(TAG, "onRestart: " + packagename); NetInterfaceManager.getInstance().getAppUsageRecordControl() .sendappUsageRecord(Utils.getSerial(), - APKUtils.getAppNameByPackage(mContext, packagename), + ApkUtils.getAppNameByPackage(mContext, packagename), packagename, AppUsedTimeUtils.getInstance().getStartTime() / 1000, AppUsedTimeUtils.getInstance().getEndTime() / 1000) @@ -136,7 +136,7 @@ public class MainPresenter implements MainContact.Presenter { long time = AppUsedTimeUtils.getInstance().getStartTime(); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("app_package", BuildConfig.APPLICATION_ID); - jsonObject.addProperty("version_name", APKUtils.getAPPVersionName(mContext, BuildConfig.APPLICATION_ID)); + jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(mContext, BuildConfig.APPLICATION_ID)); jsonObject.addProperty("start_time", time / 1000); String jsonString = jsonObject.toString(); Log.e(TAG, "sendRunningInfo: " + jsonString); diff --git a/app/src/main/java/com/uiui/os/activity/weather/WeatherPresenter.java b/app/src/main/java/com/uiui/os/activity/weather/WeatherPresenter.java index d0f90f5..6965a89 100644 --- a/app/src/main/java/com/uiui/os/activity/weather/WeatherPresenter.java +++ b/app/src/main/java/com/uiui/os/activity/weather/WeatherPresenter.java @@ -96,7 +96,7 @@ public class WeatherPresenter implements WeatherContact.Presenter { @Override public void onSuccess(WeatherDailyBean weatherDailyBean) { String jsonString = new Gson().toJson(weatherDailyBean); - Log.e("getWeather", "onSuccess: " + jsonString); + Log.d("getWeather", "onSuccess: " + jsonString); mMMKV.encode(WEATHER_DAILY_KEY, jsonString); mView.setWeather(weatherDailyBean); } diff --git a/app/src/main/java/com/uiui/os/adapter/APPListAdapter.java b/app/src/main/java/com/uiui/os/adapter/APPListAdapter.java index 274f3be..ac59df4 100644 --- a/app/src/main/java/com/uiui/os/adapter/APPListAdapter.java +++ b/app/src/main/java/com/uiui/os/adapter/APPListAdapter.java @@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.uiui.os.R; import com.uiui.os.bean.AppListInfo; -import com.uiui.os.utils.APKUtils; +import com.uiui.os.utils.ApkUtils; import java.util.List; @@ -51,7 +51,7 @@ public class APPListAdapter extends RecyclerView.Adapter holder.root.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - APKUtils.openPackage(mContext, info.getPackageName()); + ApkUtils.openPackage(mContext, info.getPackageName()); } }); } diff --git a/app/src/main/java/com/uiui/os/base/BaseFragment.java b/app/src/main/java/com/uiui/os/base/BaseFragment.java index f1c36eb..95a9a75 100644 --- a/app/src/main/java/com/uiui/os/base/BaseFragment.java +++ b/app/src/main/java/com/uiui/os/base/BaseFragment.java @@ -3,6 +3,7 @@ package com.uiui.os.base; import android.os.Bundle; import android.view.View; +import androidx.annotation.CallSuper; import androidx.annotation.CheckResult; import androidx.annotation.ContentView; import androidx.annotation.LayoutRes; @@ -15,21 +16,13 @@ import com.trello.rxlifecycle4.LifecycleTransformer; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.FragmentEvent; import com.trello.rxlifecycle4.android.RxLifecycleAndroid; +import com.trello.rxlifecycle4.components.RxFragment; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.subjects.BehaviorSubject; public class BaseFragment extends Fragment implements LifecycleProvider { - private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); - - public BaseFragment() { - super(); - } - - @ContentView - public BaseFragment(@LayoutRes int contentLayoutId) { - super(contentLayoutId); - } + public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); @Override @NonNull @@ -53,60 +46,70 @@ public class BaseFragment extends Fragment implements LifecycleProvider hourly = weatherHourlyBean.getHourly(); if (hourly != null && hourly.size() != 0) { @@ -500,7 +501,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt private void killBackgroundApp() { - List pkgList = APKUtils.queryFilterAppList(mContext); + List pkgList = ApkUtils.queryFilterAppList(mContext); for (String pkg : pkgList) { if (pkg.equalsIgnoreCase(BuildConfig.APPLICATION_ID)) continue; killBackgroundProcesses(pkg); diff --git a/app/src/main/java/com/uiui/os/fragment/SecondFragment.java b/app/src/main/java/com/uiui/os/fragment/SecondFragment.java index 3dd5b65..c71840d 100644 --- a/app/src/main/java/com/uiui/os/fragment/SecondFragment.java +++ b/app/src/main/java/com/uiui/os/fragment/SecondFragment.java @@ -1,21 +1,94 @@ package com.uiui.os.fragment; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; +import com.bumptech.glide.Glide; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiui.os.R; +import com.uiui.os.base.BaseFragment; +import com.uiui.os.bean.ActivityBean; +import com.uiui.os.bean.ArticleInfo; +import com.uiui.os.bean.BaseResponse; +import com.uiui.os.bean.DemandBean; +import com.uiui.os.bean.GoodsInfo; +import com.uiui.os.network.NetInterfaceManager; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; /** * A simple {@link Fragment} subclass. * Use the {@link SecondFragment#newInstance} factory method to * create an instance of this fragment. */ -public class SecondFragment extends Fragment { +public class SecondFragment extends BaseFragment { + private static final String TAG = SecondFragment.class.getSimpleName(); + + @BindView(R.id.iv_img) + ImageView iv_img; + @BindView(R.id.tv_goods_name) + TextView tv_goods_name; + @BindView(R.id.tv_goods_desc) + TextView tv_goods_desc; + @BindView(R.id.tv_buying_price) + TextView tv_buying_price; + @BindView(R.id.progressBar) + ProgressBar progressBar; + @BindView(R.id.tv_snapup) + TextView tv_snapup; + + @BindView(R.id.iv_aimg) + ImageView iv_aimg; + @BindView(R.id.tv_title) + TextView tv_title; + @BindView(R.id.tv_content) + TextView tv_content; + + @BindView(R.id.iv_avatar_a) + ImageView iv_avatar_a; + @BindView(R.id.tv_title_a) + TextView tv_title_a; + + @BindView(R.id.iv_avatar_d) + ImageView iv_avatar_d; + @BindView(R.id.tv_title_d) + TextView tv_title_d; + @BindView(R.id.tv_price) + TextView tv_price; + + @BindView(R.id.cl_activity) + ConstraintLayout cl_activity; + + @BindView(R.id.cl_demand) + ConstraintLayout cl_demand; + + private View rootView; + private Context mContext; + private ContentResolver mCRv; + // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; @@ -60,6 +133,201 @@ public class SecondFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_second, container, false); + rootView = inflater.inflate(R.layout.fragment_second, container, false); + mContext = rootView.getContext(); + mCRv = mContext.getContentResolver(); + ButterKnife.bind(this, rootView); + initView(); + initData(); + return rootView; + } + + private void initData() { + getGoods(); + getArticle(); + getActivityList(); + getDemandList(); + } + + private void getDemandList() { + NetInterfaceManager.getInstance().getDemandListObservable() + .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getDemandList", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getDemandList", "onNext: " + listBaseResponse); + if (listBaseResponse.code == 200) { + List demandBeans = listBaseResponse.data; + if (demandBeans != null && demandBeans.size() != 0) { + DemandBean demandBean = demandBeans.get(0); + setDemand(demandBean); + } + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getDemandList", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getDemandList", "onComplete: "); + } + }); + + } + + private void setDemand(DemandBean demandBean) { + Glide.with(iv_avatar_d).load(demandBean.getAvatar()).into(iv_avatar_d); + tv_title_d.setText(demandBean.getTitle()); + tv_price.setText(String.valueOf(demandBean.getPrice())); + } + + private void getActivityList() { + NetInterfaceManager.getInstance().getActivityListObservable() + .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getActivityList", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getActivityList", "onNext: " + listBaseResponse); + if (listBaseResponse.code == 200) { + List activityBeans = listBaseResponse.data; + if (activityBeans != null && activityBeans.size() != 0) { + ActivityBean activityBean = activityBeans.get(0); + setActivity(activityBean); + } + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getActivityList", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getActivityList", "onComplete: "); + } + }); + } + + private void setActivity(ActivityBean activity) { + Glide.with(iv_avatar_a).load(activity.getAvatar()).into(iv_avatar_a); + tv_title_a.setText(activity.getTitle()); + } + + private void initView() { + cl_activity.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + openApp(); + } + }); + cl_demand.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + openApp(); + } + }); + } + + private void openApp(){ + Intent intent = new Intent(Intent.ACTION_MAIN); + /*知道要跳转应用的包命与目标Activity*/ + ComponentName componentName = new ComponentName("com.uiui.city", "com.uiui.city.activity.MainActivity"); + intent.setComponent(componentName); + intent.putExtra("", "");//这里Intent传值 + startActivity(intent); + } + + private void getGoods() { + NetInterfaceManager.getInstance() + .getGoodsListObservable() + .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getGoods", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getGoods", "onNext: " + listBaseResponse); + if (listBaseResponse.code == 200) { + List goodsInfoList = listBaseResponse.data; + if (goodsInfoList != null && goodsInfoList.size() != 0) { + GoodsInfo goodsInfo = goodsInfoList.get(0); + setGoodsInfo(goodsInfo); + } + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getGoods", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getGoods", "onComplete: "); + } + }); + } + + private void setGoodsInfo(GoodsInfo goodsInfo) { + Glide.with(iv_img).load(goodsInfo.getImg()).into(iv_img); + tv_goods_name.setText(goodsInfo.getGoods_name()); + tv_goods_desc.setText(goodsInfo.getGoods_desc()); + tv_buying_price.setText(String.valueOf(goodsInfo.getBuying_price())); + } + + private void getArticle() { + NetInterfaceManager.getInstance().getArticleListObservable() + .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getArticle", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getArticle", "onNext: " + listBaseResponse); + if (listBaseResponse.code == 200) { + List articleInfos = listBaseResponse.data; + if (articleInfos != null && articleInfos.size() != 0) { + ArticleInfo articleInfo = articleInfos.get(0); + setArticleInfo(articleInfo); + } + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getArticle", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getArticle", "onComplete: "); + } + }); + } + + private void setArticleInfo(ArticleInfo articleInfo) { + Glide.with(iv_aimg).load(articleInfo.getImg()).into(iv_aimg); + tv_title.setText(articleInfo.getTitle()); + tv_content.setText(articleInfo.getContent()); } } diff --git a/app/src/main/java/com/uiui/os/iconpostition/IconPositionManager.java b/app/src/main/java/com/uiui/os/iconpostition/IconPositionManager.java index a6721e5..dfa4db3 100644 --- a/app/src/main/java/com/uiui/os/iconpostition/IconPositionManager.java +++ b/app/src/main/java/com/uiui/os/iconpostition/IconPositionManager.java @@ -5,10 +5,9 @@ import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; import com.uiui.os.bean.NetDesktopIcon; -import com.uiui.os.utils.APKUtils; +import com.uiui.os.utils.ApkUtils; import java.util.ArrayList; import java.util.HashMap; @@ -57,7 +56,7 @@ public class IconPositionManager { List dbList = getLogList(); for (int i = 0; i < dbList.size(); i++) { NetDesktopIcon icon = dbList.get(i); - if (!APKUtils.isAvailable(mContext, icon.getPackages())) { + if (!ApkUtils.isAvailable(mContext, icon.getPackages())) { dbList.remove(i); deleteIcon(icon.getPackages()); } diff --git a/app/src/main/java/com/uiui/os/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/os/network/NetInterfaceManager.java index 377ff88..b8bd5b8 100644 --- a/app/src/main/java/com/uiui/os/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiui/os/network/NetInterfaceManager.java @@ -4,12 +4,20 @@ import android.annotation.SuppressLint; import android.content.Context; import android.util.Log; +import com.uiui.os.bean.ActivityBean; import com.uiui.os.bean.AlarmClockData; +import com.uiui.os.bean.ArticleInfo; import com.uiui.os.bean.BaseResponse; +import com.uiui.os.bean.DemandBean; +import com.uiui.os.bean.GoodsInfo; import com.uiui.os.bean.NetDesktopIcon; +import com.uiui.os.network.api.ActivityListApi; import com.uiui.os.network.api.AlarmClockApi; import com.uiui.os.network.api.AppUsageRecordApi; +import com.uiui.os.network.api.ArticleListApi; +import com.uiui.os.network.api.DemandListApi; import com.uiui.os.network.api.GetDesktopApi; +import com.uiui.os.network.api.GoodsListApi; import com.uiui.os.network.api.HealthCodeApi; import com.uiui.os.network.api.RunNewApp; import com.uiui.os.network.api.SOSRecordApi; @@ -202,6 +210,34 @@ public class NetInterfaceManager { .observeOn(AndroidSchedulers.mainThread()); } + public Observable>> getGoodsListObservable() { + return mRetrofit.create(GoodsListApi.class) + .getGoodsList(Utils.getSerial()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Observable>> getArticleListObservable() { + return mRetrofit.create(ArticleListApi.class) + .getArticleList(Utils.getSerial()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Observable>> getActivityListObservable() { + return mRetrofit.create(ActivityListApi.class) + .getActivityList(Utils.getSerial(), 1, 1) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Observable>> getDemandListObservable() { + return mRetrofit.create(DemandListApi.class) + .getDemandList(Utils.getSerial(), 1, 1) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + public AppUsageRecordApi getAppUsageRecordControl() { return mRetrofit.create(AppUsageRecordApi.class); diff --git a/app/src/main/java/com/uiui/os/network/URLAddress.java b/app/src/main/java/com/uiui/os/network/URLAddress.java index 6ed6623..d47b79b 100644 --- a/app/src/main/java/com/uiui/os/network/URLAddress.java +++ b/app/src/main/java/com/uiui/os/network/URLAddress.java @@ -26,6 +26,10 @@ public class URLAddress { public static final String GET_GOODS_DETAILS = "getGoodsDetails"; /*获取资讯详情*/ public static final String GET_ARTICLE_DETAILS = "getArticleDetails"; + /*同城活动列表*/ + public static final String GET_ACTIVITY_LIST = "activityList"; + /*同城需求列表*/ + public static final String GET_DEMAND_LIST = "demandList"; /*获取健康吗*/ public static final String GET_HEALTH_CODE = "getHealthCode"; diff --git a/app/src/main/java/com/uiui/os/network/api/ActivityListApi.java b/app/src/main/java/com/uiui/os/network/api/ActivityListApi.java new file mode 100644 index 0000000..6c4aa0d --- /dev/null +++ b/app/src/main/java/com/uiui/os/network/api/ActivityListApi.java @@ -0,0 +1,20 @@ +package com.uiui.os.network.api; + +import com.uiui.os.bean.ActivityBean; +import com.uiui.os.bean.BaseResponse; +import com.uiui.os.network.URLAddress; + +import java.util.List; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface ActivityListApi { + @GET(URLAddress.GET_ACTIVITY_LIST) + Observable>> getActivityList( + @Query("sn") String sn, + @Query("startSize") int startSize, + @Query("pageSize") int pageSize + ); +} diff --git a/app/src/main/java/com/uiui/os/network/api/DemandListApi.java b/app/src/main/java/com/uiui/os/network/api/DemandListApi.java new file mode 100644 index 0000000..aa7665d --- /dev/null +++ b/app/src/main/java/com/uiui/os/network/api/DemandListApi.java @@ -0,0 +1,20 @@ +package com.uiui.os.network.api; + +import com.uiui.os.bean.BaseResponse; +import com.uiui.os.bean.DemandBean; +import com.uiui.os.network.URLAddress; + +import java.util.List; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface DemandListApi { + @GET(URLAddress.GET_DEMAND_LIST) + Observable>> getDemandList( + @Query("sn") String sn, + @Query("startSize") int startSize, + @Query("pageSize") int pageSize + ); +} diff --git a/app/src/main/java/com/uiui/os/receiver/InstallResultReceiver.java b/app/src/main/java/com/uiui/os/receiver/InstallResultReceiver.java new file mode 100644 index 0000000..7f0cd06 --- /dev/null +++ b/app/src/main/java/com/uiui/os/receiver/InstallResultReceiver.java @@ -0,0 +1,56 @@ +package com.uiui.os.receiver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInstaller; +import android.os.Build; +import android.util.Log; + +import androidx.annotation.RequiresApi; + +public class InstallResultReceiver extends BroadcastReceiver { + private static final String TAG = "InstallResultReceiver"; + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + @Override + public void onReceive(Context context, Intent intent) { + // an Intent broadcast. + //throw new UnsupportedOperationException("Not yet implemented"); + + + if (intent != null) { + final int status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, + PackageInstaller.STATUS_FAILURE); + if (status == PackageInstaller.STATUS_SUCCESS) { + // success + String PACKAGE_NAME = intent.getStringExtra("android.content.pm.extra.PACKAGE_NAME"); + + Log.e(TAG, "APP Install Success!"); + } else { + String msg = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE); + } + } +// String s = intent.getAction(); +// Log.e("fht", s); +// Bundle extras = intent.getExtras(); +// Set ks = extras.keySet(); +// Iterator iterator = ks.iterator(); +// while (iterator.hasNext()) { +// Log.d("KEY", iterator.next()); +// } + String STATUS = intent.getStringExtra(PackageInstaller.EXTRA_STATUS); + String PACKAGE_NAME = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME); + String SESSION_ID = intent.getStringExtra(PackageInstaller.EXTRA_SESSION_ID); + String STATUS_MESSAGE = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE); + String LEGACY_STATUS = intent.getStringExtra("android.content.pm.extra.LEGACY_STATUS"); +// Log.e("fht", STATUS); +// Log.e("fht", PACKAGE_NAME); +// Log.e("fht", SESSION_ID); +// Log.e("fht", LEGACY_STATUS); +// Log.e("fht", STATUS_MESSAGE); + if (STATUS_MESSAGE != null && "INSTALL_SUCCEEDED".equals(STATUS_MESSAGE)) { +// ToastUtil.show(PACKAGE_NAME + "安装成功"); + } + } +} diff --git a/app/src/main/java/com/uiui/os/service/main/MainService.java b/app/src/main/java/com/uiui/os/service/main/MainService.java index 4ee16f4..d54f5dc 100644 --- a/app/src/main/java/com/uiui/os/service/main/MainService.java +++ b/app/src/main/java/com/uiui/os/service/main/MainService.java @@ -21,7 +21,7 @@ import com.uiui.os.base.BaseService; import com.uiui.os.bean.AlarmClockData; import com.uiui.os.bean.BaseResponse; import com.uiui.os.network.NetInterfaceManager; -import com.uiui.os.utils.APKUtils; +import com.uiui.os.utils.ApkUtils; import com.uiui.os.utils.CmdUtil; import com.uiui.os.utils.ForegroundAppUtil; import com.uiui.os.utils.AppUsedTimeUtils; @@ -76,6 +76,9 @@ public class MainService extends BaseService implements MainSContact.MainSView, public void onCreate() { super.onCreate(); Log.e(TAG, "onCreate: "); + ApkUtils.UninstallAPP(this, "com.joytv.live"); + ApkUtils.UninstallAPP(this, "com.tencent.android.qqdownloader"); + Aria.init(this); Aria.download(this).register(); mPresenter = new MainSPresenter(this); @@ -343,7 +346,7 @@ public class MainService extends BaseService implements MainSContact.MainSView, if (!TextUtils.isEmpty(packagename)) { NetInterfaceManager.getInstance().getAppUsageRecordControl() .sendappUsageRecord(Utils.getSerial(), - APKUtils.getAppNameByPackage(context, packagename), + ApkUtils.getAppNameByPackage(context, packagename), packagename, AppUsedTimeUtils.getInstance().getStartTime() / 1000, AppUsedTimeUtils.getInstance().getEndTime() / 1000) diff --git a/app/src/main/java/com/uiui/os/utils/AmapManager.java b/app/src/main/java/com/uiui/os/utils/AmapManager.java index 88b3729..5d25550 100644 --- a/app/src/main/java/com/uiui/os/utils/AmapManager.java +++ b/app/src/main/java/com/uiui/os/utils/AmapManager.java @@ -103,7 +103,7 @@ public class AmapManager { locationClient.setLocationListener(new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { - Log.e(TAG, "onLocationChanged: " + aMapLocation.toStr()); + Log.d(TAG, "onLocationChanged: " + aMapLocation.toStr()); if (aMapLocation.getErrorCode() == 0) { nowAMapLocation = aMapLocation; mMMKV.encode(AMAPLOCATION_JSON_KEY, aMapLocation.toStr()); diff --git a/app/src/main/java/com/uiui/os/utils/APKUtils.java b/app/src/main/java/com/uiui/os/utils/ApkUtils.java similarity index 69% rename from app/src/main/java/com/uiui/os/utils/APKUtils.java rename to app/src/main/java/com/uiui/os/utils/ApkUtils.java index 34f84ca..1f1ed71 100644 --- a/app/src/main/java/com/uiui/os/utils/APKUtils.java +++ b/app/src/main/java/com/uiui/os/utils/ApkUtils.java @@ -1,28 +1,46 @@ package com.uiui.os.utils; +import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; +import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.os.Binder; +import android.os.Build; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.RequiresApi; + import com.uiui.os.BuildConfig; import com.uiui.os.bean.DesktopIcon; +import com.uiui.os.receiver.InstallResultReceiver; import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.text.Collator; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; -public class APKUtils { +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; +import io.reactivex.rxjava3.core.ObservableOnSubscribe; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +public class ApkUtils { private static HashSet excludePackageName = new HashSet() {{ this.add(BuildConfig.APPLICATION_ID); this.add("org.chromium.browser"); @@ -44,7 +62,7 @@ public class APKUtils { private static HashSet allHintPackage = new HashSet() {{ this.add("com.android.uiuios"); }}; - private static String TAG = APKUtils.class.getSimpleName(); + private static String TAG = ApkUtils.class.getSimpleName(); public static ArrayList getSystemApp(Context context) { PackageManager pm = context.getPackageManager(); @@ -93,6 +111,16 @@ public class APKUtils { return applicationInfos; } + private static List defaultSort = new ArrayList() {{ + this.add("com.android.dialer"); + this.add("com.android.messaging"); + this.add("com.android.gallery3d"); + this.add("com.android.camera2"); + this.add("com.android.settings"); + this.add("com.uiui.sn"); + this.add("com.uiui.appstore"); + }}; + /** * @param context * @return @@ -149,8 +177,20 @@ public class APKUtils { } }); ArrayList desktopIcons = new ArrayList<>(); - for (int p = 0; p < applicationInfos.size(); p++) { - desktopIcons.add(DesktopIcon.creatDesktopIcon(context, applicationInfos.get(p), p)); + HashMap infoHashMap = new HashMap<>(); + for (ApplicationInfo applicationInfo : applicationInfos) { + infoHashMap.put(applicationInfo.packageName, applicationInfo); + } + for (int i = 0; i < defaultSort.size(); i++) { + ApplicationInfo info = infoHashMap.get(defaultSort.get(i)); + if (info != null) { + desktopIcons.add(DesktopIcon.creatDesktopIcon(context, info, i)); + infoHashMap.remove(defaultSort.get(i)); + } + } + + for (ApplicationInfo applicationInfo : infoHashMap.values()) { + desktopIcons.add(DesktopIcon.creatDesktopIcon(context, applicationInfo)); } return desktopIcons; } @@ -325,4 +365,105 @@ public class APKUtils { return ""; } } + + /** + * 静默卸载应用 + * + * @param context + * @param pkg + */ + public static void UninstallAPP(Context context, String pkg) { + Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + Log.e("UninstallAPP", "call: " + Thread.currentThread().getName()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + ApkUtils.uninstall(context, pkg); + } else { + ApkUtils.deleteApkInSilence(pkg); + } + emitter.onNext(pkg); + } + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e("UninstallAPP", "onSubscribe: "); + } + + @Override + public void onNext(String s) { + Log.e("UninstallAPP", "onNext: " + Thread.currentThread().getName()); + Log.e("UninstallAPP", "onNext: " + s); + } + + @Override + public void onError(Throwable e) { + Log.e("UninstallAPP", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("UninstallAPP", "onComplete: "); + } + }); + } + + /** + * 根据包名卸载应用 + * + * @param packageName 包名 + */ + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public static void uninstall(Context context, String packageName) { + Intent broadcastIntent = new Intent(context, InstallResultReceiver.class); + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, + broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT); + PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller(); + packageInstaller.uninstall(packageName, pendingIntent.getIntentSender()); + } + + public static void deleteApkInSilence(String packageName) { + Class pmService; + Class activityTherad; + Method method; + try { + activityTherad = Class.forName("android.app.ActivityThread"); + Class paramTypes[] = getParamTypes(activityTherad, "getPackageManager"); + method = activityTherad.getMethod("getPackageManager", paramTypes); + Object PackageManagerService = method.invoke(activityTherad); + pmService = PackageManagerService.getClass(); + Class paramTypes1[] = getParamTypes(pmService, "deletePackageAsUser"); + method = pmService.getMethod("deletePackageAsUser", paramTypes1); + //getUserId + method.invoke(PackageManagerService, packageName, null, getUserId(Binder.getCallingUid()), 0x00000040); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + + private static Class[] getParamTypes(Class cls, String mName) { + Class cs[] = null; + Method[] mtd = cls.getMethods(); + for (int i = 0; i < mtd.length; i++) { + if (!mtd[i].getName().equals(mName)) { + continue; + } + cs = mtd[i].getParameterTypes(); + } + return cs; + } + + public static final int PER_USER_RANGE = 100000; + + public static int getUserId(int uid) { + return uid / PER_USER_RANGE; + } } diff --git a/app/src/main/res/drawable-hdpi/com_android_appstore.png b/app/src/main/res/drawable-hdpi/com_android_appstore.png index d318a48..03443fa 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_appstore.png and b/app/src/main/res/drawable-hdpi/com_android_appstore.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_browser.png b/app/src/main/res/drawable-hdpi/com_android_browser.png index f0c9cb1..405eb59 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_browser.png and b/app/src/main/res/drawable-hdpi/com_android_browser.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_calculator2.png b/app/src/main/res/drawable-hdpi/com_android_calculator2.png index 1de3635..9bb3287 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_calculator2.png and b/app/src/main/res/drawable-hdpi/com_android_calculator2.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_calendar.png b/app/src/main/res/drawable-hdpi/com_android_calendar.png index 1119ba1..e70be32 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_calendar.png and b/app/src/main/res/drawable-hdpi/com_android_calendar.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_camera.png b/app/src/main/res/drawable-hdpi/com_android_camera.png index a6397d1..85ad259 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_camera.png and b/app/src/main/res/drawable-hdpi/com_android_camera.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_clean.png b/app/src/main/res/drawable-hdpi/com_android_clean.png index 194da2c..02a2238 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_clean.png and b/app/src/main/res/drawable-hdpi/com_android_clean.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_contacts.png b/app/src/main/res/drawable-hdpi/com_android_contacts.png index 35970d2..ed2d5e2 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_contacts.png and b/app/src/main/res/drawable-hdpi/com_android_contacts.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_deskclock.png b/app/src/main/res/drawable-hdpi/com_android_deskclock.png index 9fbacbb..986e8e5 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_deskclock.png and b/app/src/main/res/drawable-hdpi/com_android_deskclock.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_dialer.png b/app/src/main/res/drawable-hdpi/com_android_dialer.png index 335090a..48775aa 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_dialer.png and b/app/src/main/res/drawable-hdpi/com_android_dialer.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_gallery3d_app.png b/app/src/main/res/drawable-hdpi/com_android_gallery3d_app.png index 98e484f..e9da7c3 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_gallery3d_app.png and b/app/src/main/res/drawable-hdpi/com_android_gallery3d_app.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_mms_ui.png b/app/src/main/res/drawable-hdpi/com_android_mms_ui.png index 9f62b91..c6c5af5 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_mms_ui.png and b/app/src/main/res/drawable-hdpi/com_android_mms_ui.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_music.png b/app/src/main/res/drawable-hdpi/com_android_music.png index 8beb546..9c898d3 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_music.png and b/app/src/main/res/drawable-hdpi/com_android_music.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_settings.png b/app/src/main/res/drawable-hdpi/com_android_settings.png index e3ef259..1a258a7 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_settings.png and b/app/src/main/res/drawable-hdpi/com_android_settings.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png b/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png index 34a2ddd..915c773 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png and b/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png b/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png index 0c460cc..efefc92 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png and b/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png differ diff --git a/app/src/main/res/drawable-hdpi/com_android_vdieo.png b/app/src/main/res/drawable-hdpi/com_android_vdieo.png index d292dfd..09e158c 100644 Binary files a/app/src/main/res/drawable-hdpi/com_android_vdieo.png and b/app/src/main/res/drawable-hdpi/com_android_vdieo.png differ diff --git a/app/src/main/res/drawable-hdpi/com_mediatek_filemanager.png b/app/src/main/res/drawable-hdpi/com_mediatek_filemanager.png index 02a37cd..deec7e2 100644 Binary files a/app/src/main/res/drawable-hdpi/com_mediatek_filemanager.png and b/app/src/main/res/drawable-hdpi/com_mediatek_filemanager.png differ diff --git a/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png b/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png index 6eaf599..0bc578f 100644 Binary files a/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png and b/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png differ diff --git a/app/src/main/res/drawable-hdpi/com_uiui_sn.png b/app/src/main/res/drawable-hdpi/com_uiui_sn.png index 900dded..57ad53d 100644 Binary files a/app/src/main/res/drawable-hdpi/com_uiui_sn.png and b/app/src/main/res/drawable-hdpi/com_uiui_sn.png differ diff --git a/app/src/main/res/drawable/main_pb_bg.xml b/app/src/main/res/drawable/main_pb_bg.xml new file mode 100644 index 0000000..5196b24 --- /dev/null +++ b/app/src/main/res/drawable/main_pb_bg.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/pgs_bar_bg.xml b/app/src/main/res/drawable/pgs_bar_bg.xml new file mode 100644 index 0000000..08a4242 --- /dev/null +++ b/app/src/main/res/drawable/pgs_bar_bg.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_pg_sb.xml b/app/src/main/res/drawable/shape_pg_sb.xml new file mode 100644 index 0000000..837119a --- /dev/null +++ b/app/src/main/res/drawable/shape_pg_sb.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_second.xml b/app/src/main/res/layout-land/fragment_second.xml index 2ba1f6f..be4b4d2 100644 --- a/app/src/main/res/layout-land/fragment_second.xml +++ b/app/src/main/res/layout-land/fragment_second.xml @@ -19,36 +19,205 @@ + android:layout_marginStart="16dp" + android:layout_marginTop="16dp" + android:layout_marginEnd="8dp" + android:layout_marginBottom="8dp" + android:layout_weight="1" + android:background="@drawable/custom_background"> + + + + + + + + + + + + + + + + + + + + + android:layout_marginStart="8dp" + android:layout_marginTop="16dp" + android:layout_marginEnd="16dp" + android:layout_marginBottom="8dp" + android:layout_weight="1" + android:background="@drawable/custom_background"> + + + + + + + + + @@ -58,9 +227,15 @@ android:layout_weight="2"> + android:layout_marginStart="16dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="8dp" + android:layout_marginBottom="16dp" + android:layout_weight="1" + android:background="@drawable/custom_background"> + + + + + + + + + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="16dp" + android:layout_marginBottom="16dp" + android:layout_weight="1" + android:background="@drawable/custom_background"> + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-port/fragment_second.xml b/app/src/main/res/layout-port/fragment_second.xml index 7127939..827d787 100644 --- a/app/src/main/res/layout-port/fragment_second.xml +++ b/app/src/main/res/layout-port/fragment_second.xml @@ -1,5 +1,6 @@ - - - + android:layout_height="0dp" + android:layout_weight="3"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 83ce022..8834ccf 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 83ce022..8834ccf 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 83ce022..8834ccf 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 83ce022..8834ccf 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 83ce022..8834ccf 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ