From 64ef99ba10a361a7c473b2ec0e59906b6828c57d Mon Sep 17 00:00:00 2001 From: fanhuitong <981964879@qq.com> Date: Mon, 12 Dec 2022 16:43:19 +0800 Subject: [PATCH] =?UTF-8?q?version:6.8=20fix:=20update:=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=BB=E9=A1=B5=E5=81=A5=E5=BA=B7=E7=A0=81=E4=B8=BA=E5=BA=94?= =?UTF-8?q?=E7=94=A8=EF=BC=8C=E6=8B=A8=E5=8F=B7=E5=A2=9E=E5=8A=A0=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=8B=A8=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 10 +- app/src/main/AndroidManifest.xml | 2 + .../uiui/aios/activity/QuickAppActivity.java | 73 +++++++++++++++ .../activity/contact/ContactActivity.java | 11 ++- .../activity/contact/ContactPresenter.java | 26 +++++- .../uiui/aios/adapter/AppSelectedAdapter.java | 87 ++++++++++++++++++ .../com/uiui/aios/adapter/ContactAdapter.java | 15 ++- .../com/uiui/aios/base/BaseApplication.java | 61 +++++------- .../com/uiui/aios/bean/AppSelectBean.java | 43 +++++++++ .../aios/fragment/custom/CustomFragment.java | 58 ++++++++++-- .../interceptor/RepeatRequestInterceptor.java | 36 ++++++-- .../aios/service/main/MainSPresenter.java | 4 +- .../java/com/uiui/aios/utils/SystemUtils.java | 24 +++++ .../aios/view/GridSpaceItemDecoration.java | 59 ++++++++++++ .../main/res/drawable-hdpi/dialer_icon.png | Bin 0 -> 2959 bytes .../main/res/drawable-hdpi/home_quick_app.png | Bin 0 -> 6416 bytes .../main/res/drawable-hdpi/icon_selected.png | Bin 0 -> 2194 bytes .../res/drawable-hdpi/icon_unselected.png | Bin 0 -> 2163 bytes app/src/main/res/drawable-hdpi/more.png | Bin 0 -> 1226 bytes .../res/drawable/app_select_background.xml | 18 ++++ .../main/res/layout-land/fragment_custom.xml | 76 +++++++++++++-- .../main/res/layout-port/fragment_custom.xml | 67 +++++++++++++- .../main/res/layout/activity_quick_app.xml | 20 ++++ .../main/res/layout/dialog_privacy_policy.xml | 41 +++++---- app/src/main/res/layout/item_app_select.xml | 55 +++++++++++ app/src/main/res/values/colors.xml | 1 + 26 files changed, 696 insertions(+), 91 deletions(-) create mode 100644 app/src/main/java/com/uiui/aios/activity/QuickAppActivity.java create mode 100644 app/src/main/java/com/uiui/aios/adapter/AppSelectedAdapter.java create mode 100644 app/src/main/java/com/uiui/aios/bean/AppSelectBean.java create mode 100644 app/src/main/java/com/uiui/aios/utils/SystemUtils.java create mode 100644 app/src/main/java/com/uiui/aios/view/GridSpaceItemDecoration.java create mode 100644 app/src/main/res/drawable-hdpi/dialer_icon.png create mode 100644 app/src/main/res/drawable-hdpi/home_quick_app.png create mode 100644 app/src/main/res/drawable-hdpi/icon_selected.png create mode 100644 app/src/main/res/drawable-hdpi/icon_unselected.png create mode 100644 app/src/main/res/drawable-hdpi/more.png create mode 100644 app/src/main/res/drawable/app_select_background.xml create mode 100644 app/src/main/res/layout/activity_quick_app.xml create mode 100644 app/src/main/res/layout/item_app_select.xml diff --git a/app/build.gradle b/app/build.gradle index 4b2f489..671087a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.uiui.aios" minSdkVersion 24 targetSdkVersion 29 - versionCode 56 - versionName "6.5" + versionCode 59 + versionName "6.8" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -127,6 +127,9 @@ android { } } } + manifestPlaceholders = [ + Baidu_AK: "ZauKWLbO0AfHSgR2j3unMkP0MwbBZHxO" + ] } release { @@ -151,6 +154,9 @@ android { } } } + manifestPlaceholders = [ + Baidu_AK: "ZauKWLbO0AfHSgR2j3unMkP0MwbBZHxO" + ] } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a44ff12..2522f2c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -125,6 +125,8 @@ android:name=".activity.PolicyActivity" android:screenOrientation="portrait" android:theme="@style/AppWhiteTheme" /> + + getPackageList() { + PackageManager pm = getPackageManager(); + List appSelectBeanList = new ArrayList<>(); + List applicationInfos = pm.getInstalledPackages(0); + for (PackageInfo packageInfo : applicationInfos) { + if (BuildConfig.APPLICATION_ID.equals(packageInfo.applicationInfo.packageName)) { + continue; + } + final boolean isSystem = (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + if (!listThirdParty || !isSystem) { + AppSelectBean appSelectBean = new AppSelectBean(packageInfo.applicationInfo.loadLabel(pm).toString(), packageInfo.applicationInfo.packageName, packageInfo.applicationInfo.loadIcon(pm)); + appSelectBeanList.add(appSelectBean); + } + } + return appSelectBeanList; + } +} diff --git a/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java b/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java index 5190a69..a1a6d2e 100644 --- a/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java +++ b/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java @@ -74,10 +74,11 @@ public class ContactActivity extends BaseActivity implements ContactContact.Cont @Override public void setContact(List contactList) { - if (contactList != null) { - mContactAdapter.setContactList(contactList); - tv_people.setText(contactList.size() + "人"); - } - + tv_people.setText(contactList.size() + "人"); + Contact contact = new Contact(); + contact.setName("拨号"); + contact.setMobile(ContactAdapter.DIALER_PACKAGE); + contactList.add(0, contact); + mContactAdapter.setContactList(contactList); } } diff --git a/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java b/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java index 61bc49c..22133be 100644 --- a/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java +++ b/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java @@ -3,12 +3,19 @@ package com.uiui.aios.activity.contact; import android.content.Context; import android.util.Log; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.tencent.mmkv.MMKV; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiui.aios.bean.BaseResponse; import com.uiui.aios.bean.Contact; import com.uiui.aios.network.NetInterfaceManager; +import com.uiui.aios.network.URLAddress; +import com.uiui.aios.utils.GsonUtils; +import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.List; import io.reactivex.rxjava3.annotations.NonNull; @@ -19,6 +26,7 @@ import io.reactivex.rxjava3.subjects.BehaviorSubject; public class ContactPresenter implements ContactContact.Presenter { private Context mContext; private ContactContact.ContactView mView; + private MMKV mMMKV = MMKV.defaultMMKV(); private BehaviorSubject lifecycle; @@ -58,12 +66,28 @@ public class ContactPresenter implements ContactContact.Presenter { @Override public void onNext(@NonNull BaseResponse> listBaseResponse) { Log.e("getContactList", "onNext: " + listBaseResponse); - mView.setContact(listBaseResponse.data); + if (listBaseResponse.code == 200) { + mMMKV.putString(URLAddress.GET_MAIL_LIST, GsonUtils.toJsonString(listBaseResponse.data)); + mView.setContact(listBaseResponse.data); + } else { + mMMKV.putString(URLAddress.GET_MAIL_LIST, ""); + mView.setContact(new ArrayList<>()); + } } @Override public void onError(@NonNull Throwable e) { Log.e("getContactList", "onError: " + e.getMessage()); + String jsonString = mMMKV.getString(URLAddress.GET_MAIL_LIST, null); + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + List contacts = gson.fromJson(jsonString, type); + if (contacts == null) { + mView.setContact(new ArrayList<>()); + } else { + mView.setContact(contacts); + } onComplete(); } diff --git a/app/src/main/java/com/uiui/aios/adapter/AppSelectedAdapter.java b/app/src/main/java/com/uiui/aios/adapter/AppSelectedAdapter.java new file mode 100644 index 0000000..0e5d710 --- /dev/null +++ b/app/src/main/java/com/uiui/aios/adapter/AppSelectedAdapter.java @@ -0,0 +1,87 @@ +package com.uiui.aios.adapter; + +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.tencent.mmkv.MMKV; +import com.uiui.aios.R; +import com.uiui.aios.activity.QuickAppActivity; +import com.uiui.aios.bean.AppSelectBean; + +import java.util.List; + +public class AppSelectedAdapter extends RecyclerView.Adapter { + private static final String TAG = AppSelectedAdapter.class.getSimpleName(); + private Context mContext; + private List mAppSelectBeans; + private int unselectedStatus = -1; + private int selecedPosition = unselectedStatus; + private MMKV mMMKV = MMKV.defaultMMKV(); + + public void setAppSelectBeans(List appSelectBeanList) { + this.mAppSelectBeans = appSelectBeanList; + notifyDataSetChanged(); + } + + @NonNull + @Override + public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + mContext = parent.getContext(); + return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_app_select, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull Holder holder, int position) { + AppSelectBean appSelectBean = mAppSelectBeans.get(position); + holder.iv_icon.setImageDrawable(appSelectBean.getIcon()); + holder.tv_name.setText(appSelectBean.getAppName()); + if (selecedPosition == position) { + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); + } else { + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselected)); + } + holder.iv_select.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (position != selecedPosition) { + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); + selecedPosition = position; + mMMKV.encode(QuickAppActivity.QUICK_APP_KEY, appSelectBean.getPackageName()); + Log.e(TAG, "setQuickApp: " + appSelectBean.getPackageName()); + + } else { + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselected)); + selecedPosition = -1; + mMMKV.encode(QuickAppActivity.QUICK_APP_KEY, ""); + Log.e(TAG, "setQuickApp: empty"); + } + notifyDataSetChanged(); + } + }); + } + + @Override + public int getItemCount() { + return mAppSelectBeans == null ? 0 : mAppSelectBeans.size(); + } + + static class Holder extends RecyclerView.ViewHolder { + ImageView iv_select, iv_icon; + TextView tv_name; + + Holder(@NonNull View itemView) { + super(itemView); + iv_select = itemView.findViewById(R.id.iv_select); + iv_icon = itemView.findViewById(R.id.iv_icon); + tv_name = itemView.findViewById(R.id.tv_name); + } + } +} diff --git a/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java b/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java index b8d80dc..0a54666 100644 --- a/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java +++ b/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java @@ -25,6 +25,8 @@ public class ContactAdapter extends RecyclerView.Adapter mContactList; private Context mContext; + public static final String DIALER_PACKAGE = "com.android.dialer"; + public void setContactList(List contactList) { this.mContactList = contactList; notifyDataSetChanged(); @@ -45,7 +47,9 @@ public class ContactAdapter extends RecyclerView.Adapter contactList) { - if (contactList == null || contactList.size() == 0) { - showNoData("温馨提示", "请在小程序上设置通讯录"); - } else { - startActivity(new Intent(getActivity(), ContactActivity.class)); - } +// if (contactList == null || contactList.size() == 0) { +// showNoData("温馨提示", "请在小程序上设置通讯录"); +// } else { +// startActivity(new Intent(mContext, ContactActivity.class)); +// } } @Override @@ -510,12 +534,12 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom @Override public void setEmpty() { - showNoData("温馨提示", "请在小程序上设置通讯录"); +// showNoData("温馨提示", "请在小程序上设置通讯录"); } @Override public void onComplete() { - + startActivity(new Intent(mContext, ContactActivity.class)); } }); } @@ -591,9 +615,29 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom // setAlarm(); getAlarmClock(); setSosNumber(); + setQuickApp(); mCustomPresenter.getSnIsActivation(); } + private String quickAppPackagesName; + + private void setQuickApp() { + quickAppPackagesName = mMMKV.decodeString(QuickAppActivity.QUICK_APP_KEY, ""); + Log.e(TAG, "setQuickApp: " + quickAppPackagesName); + if (!TextUtils.isEmpty(quickAppPackagesName)) { + ApplicationInfo applicationInfo = null; + PackageManager pm = mContext.getPackageManager(); + try { + applicationInfo = pm.getApplicationInfo(quickAppPackagesName, 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + if (applicationInfo != null) { + iv_app.setImageDrawable(applicationInfo.loadIcon(pm)); + } + } + } + private void openScheme(String uri) { int is_health = mMMKV.decodeInt("is_health", 0); if (is_health == 0) { diff --git a/app/src/main/java/com/uiui/aios/network/interceptor/RepeatRequestInterceptor.java b/app/src/main/java/com/uiui/aios/network/interceptor/RepeatRequestInterceptor.java index 83d8973..3da88e4 100644 --- a/app/src/main/java/com/uiui/aios/network/interceptor/RepeatRequestInterceptor.java +++ b/app/src/main/java/com/uiui/aios/network/interceptor/RepeatRequestInterceptor.java @@ -13,9 +13,14 @@ import java.util.concurrent.ConcurrentHashMap; import okhttp3.Interceptor; import okhttp3.Protocol; import okhttp3.Request; +import okhttp3.RequestBody; import okhttp3.Response; +import okhttp3.ResponseBody; import okio.Buffer; +/** + * v1.0 2022-07-15 16:16:52 + */ public class RepeatRequestInterceptor implements Interceptor { private static final String TAG = RepeatRequestInterceptor.class.getSimpleName(); @@ -26,13 +31,18 @@ public class RepeatRequestInterceptor implements Interceptor { @Override public Response intercept(@NotNull Chain chain) throws IOException { Request request = chain.request(); + Response response = chain.proceed(request); + ResponseBody responseBody = response.body(); - Response response = chain.proceed(chain.request()); - String content = response.body().string(); - if (BuildConfig.DEBUG) - Log.e(TAG, "请求体返回:| Response:" + content); + //会消费请求,导致请求多次 + String content = responseBody.string(); +// Response copy = response.newBuilder().body(responseBody).build(); + ResponseBody copy = ResponseBody.create(responseBody.contentType(), content); + if (BuildConfig.DEBUG) { +// Log.e(TAG, "请求体返回:| Response: " + request.url().encodedPath() + "\t body: " + content); + } //相同的请求 - String requestKey = MD5Util.getUpperMD5Str(request.method() + request.url().toString() + request.body()); + String requestKey = MD5Util.getUpperMD5Str(request.method() + request.url().toString() + requestBodyToString(request.body())); long time = System.currentTimeMillis();//请求时间 try { if (requestIdsMap.size() > 0 && requestIdsMap.containsKey(requestKey)) { @@ -48,7 +58,7 @@ public class RepeatRequestInterceptor implements Interceptor { log("注册请求:", requestKey, request); // RepeatRequestInterceptor.Builder builder = request.newBuilder(); // builder.addHeader("header", jsonObject.toString()); - return chain.proceed(request); + return response.newBuilder().body(copy).build(); } catch (IOException e) { Log.e(TAG, "intercept: " + e.getMessage()); throw e; @@ -78,8 +88,20 @@ public class RepeatRequestInterceptor implements Interceptor { } return buffer.readUtf8(); } catch (Exception e) { - return "-" + e.getMessage(); + return "-"; } } + private static String requestBodyToString(RequestBody body) { + try { + final Buffer buffer = new Buffer(); + body.writeTo(buffer); + if (buffer.size() > 4096) { + return "-too long"; + } + return buffer.readUtf8(); + } catch (Exception e) { + return "-"; + } + } } diff --git a/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java b/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java index 4f2433d..f14d454 100644 --- a/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java +++ b/app/src/main/java/com/uiui/aios/service/main/MainSPresenter.java @@ -65,12 +65,12 @@ public class MainSPresenter implements MainSContact.Presenter { @Override public void setAlarmClockEmpty() { - Log.e(TAG, "setAlarmClock: "); + Log.e(TAG, "setAlarmClock: setAlarmClockEmpty"); } @Override public void onError() { - Log.e(TAG, "setAlarmClock: "); + Log.e(TAG, "setAlarmClock: onError"); } }); diff --git a/app/src/main/java/com/uiui/aios/utils/SystemUtils.java b/app/src/main/java/com/uiui/aios/utils/SystemUtils.java new file mode 100644 index 0000000..6fba55b --- /dev/null +++ b/app/src/main/java/com/uiui/aios/utils/SystemUtils.java @@ -0,0 +1,24 @@ +package com.uiui.aios.utils; + +import android.app.ActivityManager; +import android.content.Context; + +import java.util.List; + +public class SystemUtils { + + public static boolean isMainProcessName(Context cxt, int pid) { + String packageName = cxt.getPackageName(); + ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE); + List runningApps = am.getRunningAppProcesses(); + if (runningApps == null) { + return false; + } + for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) { + if (procInfo.pid == pid) { + return procInfo.processName.equals(packageName); + } + } + return false; + } +} diff --git a/app/src/main/java/com/uiui/aios/view/GridSpaceItemDecoration.java b/app/src/main/java/com/uiui/aios/view/GridSpaceItemDecoration.java new file mode 100644 index 0000000..aa1c293 --- /dev/null +++ b/app/src/main/java/com/uiui/aios/view/GridSpaceItemDecoration.java @@ -0,0 +1,59 @@ +package com.uiui.aios.view; + +import android.graphics.Rect; +import android.util.Log; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +/** + * 描述 : RecyclerView GridLayoutManager 等间距。 + *

+ * 等间距需满足两个条件: + * 1.各个模块的大小相等,即 各列的left+right 值相等; + * 2.各列的间距相等,即 前列的right + 后列的left = 列间距; + *

+ * 在{@link #getItemOffsets(Rect, View, RecyclerView, RecyclerView.State)} 中针对 outRect 的left 和right 满足这两个条件即可 + *

+ * 作者 : shiguotao + * 版本 : V1 + * 创建时间 : 2020/3/19 4:54 PM + */ +public class GridSpaceItemDecoration extends RecyclerView.ItemDecoration { + + private final String TAG = "GridSpaceItemDecoration"; + + private int mSpanCount;//横条目数量 + private int mRowSpacing;//行间距 + private int mColumnSpacing;// 列间距 + + /** + * @param spanCount 列数 + * @param rowSpacing 行间距 + * @param columnSpacing 列间距 + */ + public GridSpaceItemDecoration(int spanCount, int rowSpacing, int columnSpacing) { + this.mSpanCount = spanCount; + this.mRowSpacing = rowSpacing; + this.mColumnSpacing = columnSpacing; + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + int position = parent.getChildAdapterPosition(view); // 获取view 在adapter中的位置。 + int column = position % mSpanCount; // view 所在的列 + + outRect.left = column * mColumnSpacing / mSpanCount; // column * (列间距 * (1f / 列数)) + outRect.right = mColumnSpacing - (column + 1) * mColumnSpacing / mSpanCount; // 列间距 - (column + 1) * (列间距 * (1f /列数)) + + Log.e(TAG, "position:" + position + + " columnIndex: " + column + + " left,right ->" + outRect.left + "," + outRect.right); + + // 如果position > 行数,说明不是在第一行,则不指定行高,其他行的上间距为 top=mRowSpacing + if (position >= mSpanCount) { + outRect.top = mRowSpacing; // item top + } + } +} diff --git a/app/src/main/res/drawable-hdpi/dialer_icon.png b/app/src/main/res/drawable-hdpi/dialer_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb8c3a1a1366d7e2005d6224e33981e5f32cd28 GIT binary patch literal 2959 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 FV1f!;BP##^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/home_quick_app.png b/app/src/main/res/drawable-hdpi/home_quick_app.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e54397eb0a9c4f093ba7171352c8ee1363cf65 GIT binary patch literal 6416 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/more.png b/app/src/main/res/drawable-hdpi/more.png new file mode 100644 index 0000000000000000000000000000000000000000..b5fb61b2cec9e3ea0bb93cc78e90db8958b4401f GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>lp4@Q>(m(e-}!naz9lADyUDuTq)%OHblEe_>2v zq>4<&f1%@7C(fC(Pk7z#{{qKFr@I_#{AB-Vht(wE%jM3yvpXJlb$iCm+b18TYFXOb zsB-eXQevgF%co0U*fK(Uo|sSEu!mQvvapJIinLMc`vMzI9Ul1P6P{oTI~^W zk8Prj{a(f>QRSbmDmv>WPM-Jd^UZGvlXfX8fhd{`QDhEL6bM$t?>TSoJ%+Vr9ZzOL z%>53r{0qc#YoIMjD)-eYvw%k2QkbN^+}vR`P@tpbX|BLY;mgtsLJcRacRlo}YvLU5 zPd|W~wmPcxgRDL3u}_He^lgPn?hq~UT`f;Vl`UsKnFzGUOJ#$*;Ur^Exp@$~Pe5$r z2HUoLvW*GQiJdIpG~7N_PC5*<S%apd&ObyywYcmG1~OGoIXo+si-cjxpGLONa#;ed9S)N8|Xv0;y@(6sH2D%&9*z2{T(8m>m#GjAr?6?^7A zc?PudP`tp6g%a)O71nsmY;ZQ@yWhM)ukZlhQHwuf-KC|40fQi>qOX3 z-%{v%zRcVKXn=iZbE@d$AC@OC0yQNyTY%CvNRc2!5io%P742861Z4(|V})_x0O*5w zRj&iASNCK$(E6ing?m703m8hVU`27j1eiN%Pg!qaj0ijXAybzk&6AxkcR$?qQ+{HM zS5eWgxE=5QIjc-Rda&`E{=^u+Pp7`r8oZNN`splFFm=D{r&nKW3l9I(o)mn!9HV@I c3EVmHkHwUO^JM8`NokOnr>mdKI;Vst0OZXUHvj+t literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/app_select_background.xml b/app/src/main/res/drawable/app_select_background.xml new file mode 100644 index 0000000..d4c331c --- /dev/null +++ b/app/src/main/res/drawable/app_select_background.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_custom.xml b/app/src/main/res/layout-land/fragment_custom.xml index 978951d..362976e 100644 --- a/app/src/main/res/layout-land/fragment_custom.xml +++ b/app/src/main/res/layout-land/fragment_custom.xml @@ -102,8 +102,8 @@ android:layout_marginEnd="@dimen/dp_4" android:layout_marginBottom="@dimen/dp_2" android:layout_weight="3" - android:visibility="gone" - android:background="@drawable/custom_bg_weather"> + android:background="@drawable/custom_bg_weather" + android:visibility="gone"> + + + + + + + + + + + + android:background="@drawable/custom_bg_health" + android:visibility="gone"> + + + + + + + + + + + + + android:background="@drawable/custom_bg_health" + android:visibility="gone"> diff --git a/app/src/main/res/layout/activity_quick_app.xml b/app/src/main/res/layout/activity_quick_app.xml new file mode 100644 index 0000000..e4b5113 --- /dev/null +++ b/app/src/main/res/layout/activity_quick_app.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_privacy_policy.xml b/app/src/main/res/layout/dialog_privacy_policy.xml index a9b68ad..b262df4 100644 --- a/app/src/main/res/layout/dialog_privacy_policy.xml +++ b/app/src/main/res/layout/dialog_privacy_policy.xml @@ -1,13 +1,12 @@ - + app:layout_constraintTop_toBottomOf="@+id/textView6"> + + + + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent"> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 100d2b3..9dfe5a8 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -28,5 +28,6 @@ #2c77ba #f4bea3 + #858585