From 88279fa8a750a4ff24b093649159dc833cbce1fd Mon Sep 17 00:00:00 2001 From: Soren Stoutner Date: Wed, 17 Aug 2016 10:34:23 -0700 Subject: [PATCH] Fix crashing when creating or editing bookmarks with no favorite icon. Fixes https://redmine.stoutner.com/issues/47 --- app/src/main/assets/about_licenses.html | 2 + .../privacybrowser/BookmarksActivity.java | 41 ++++++++---------- .../stoutner/privacybrowser/EditBookmark.java | 2 - .../privacybrowser/EditBookmarkFolder.java | 6 +-- .../privacybrowser/MainWebViewActivity.java | 11 +++++ app/src/main/res/drawable-hdpi/world.png | Bin 0 -> 2884 bytes app/src/main/res/drawable-mdpi/world.png | Bin 0 -> 2162 bytes app/src/main/res/drawable-xhdpi/world.png | Bin 0 -> 4252 bytes app/src/main/res/drawable-xxhdpi/world.png | Bin 0 -> 5855 bytes .../folder_dark_blue.xml | 0 app/src/main/res/drawable/world.xml | 15 ------- 11 files changed, 35 insertions(+), 42 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/world.png create mode 100644 app/src/main/res/drawable-mdpi/world.png create mode 100644 app/src/main/res/drawable-xhdpi/world.png create mode 100644 app/src/main/res/drawable-xxhdpi/world.png rename app/src/main/res/{drawable-mdpi => drawable}/folder_dark_blue.xml (100%) delete mode 100644 app/src/main/res/drawable/world.xml diff --git a/app/src/main/assets/about_licenses.html b/app/src/main/assets/about_licenses.html index f09fbb42..9bd93d46 100644 --- a/app/src/main/assets/about_licenses.html +++ b/app/src/main/assets/about_licenses.html @@ -57,6 +57,8 @@ are derived from ic_security and ic_language. Modifications were made by Soren Stoutner in 2016.

+

The following icons are unchanged except for layout information like color and size. Some of them have been renamed to match their use in the code. The original icons and names are shown below.

+

ic_language.

ic_home.

diff --git a/app/src/main/java/com/stoutner/privacybrowser/BookmarksActivity.java b/app/src/main/java/com/stoutner/privacybrowser/BookmarksActivity.java index 9b9bfb71..834889cb 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/BookmarksActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/BookmarksActivity.java @@ -33,7 +33,6 @@ import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v4.app.NavUtils; -import android.support.v4.content.ContextCompat; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; @@ -542,8 +541,9 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma EditText createBookmarkUrlEditText = (EditText) dialogFragment.getDialog().findViewById(R.id.create_bookmark_url_edittext); String bookmarkUrlString = createBookmarkUrlEditText.getText().toString(); - // Convert the favoriteIcon Bitmap to a byte array. `0` is for lossless compression (the only option for a PNG). + // Convert the favoriteIcon Bitmap to a byte array. ByteArrayOutputStream favoriteIconByteArrayOutputStream = new ByteArrayOutputStream(); + // `0` is for lossless compression (the only option for a PNG). MainWebViewActivity.favoriteIcon.compress(Bitmap.CompressFormat.PNG, 0, favoriteIconByteArrayOutputStream); byte[] favoriteIconByteArray = favoriteIconByteArrayOutputStream.toByteArray(); @@ -577,19 +577,20 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma String cannotCreateFolder = getResources().getString(R.string.cannot_create_folder) + " \"" + folderNameString + "\""; Snackbar.make(findViewById(R.id.bookmarks_coordinatorlayout), cannotCreateFolder, Snackbar.LENGTH_INDEFINITE).show(); } else { // Create the folder. - // Get the new folder icon. + // Get the new folder icon `Bitmap`. RadioButton defaultFolderIconRadioButton = (RadioButton) dialogFragment.getDialog().findViewById(R.id.create_folder_default_icon_radiobuttion); Bitmap folderIconBitmap; if (defaultFolderIconRadioButton.isChecked()) { - // Get the default folder icon drawable and convert it to a `Bitmap`. `this` specifies the current context. - Drawable folderIconDrawable = ContextCompat.getDrawable(this, R.drawable.folder_blue_bitmap); + // Get the default folder icon `ImageView` from the `Dialog` and convert it to a `Bitmap`. + ImageView folderIconImageView = (ImageView) dialogFragment.getDialog().findViewById(R.id.create_folder_default_icon); + Drawable folderIconDrawable = folderIconImageView.getDrawable(); BitmapDrawable folderIconBitmapDrawable = (BitmapDrawable) folderIconDrawable; folderIconBitmap = folderIconBitmapDrawable.getBitmap(); - } else { + } else { // Assign `favoriteIcon` from the `WebView`. folderIconBitmap = MainWebViewActivity.favoriteIcon; } - // Convert the folder `Bitmap` to a byte array. `0` is for lossless compression (the only option for a PNG). + // Convert `folderIconBitmap` to a byte array. `0` is for lossless compression (the only option for a PNG). ByteArrayOutputStream folderIconByteArrayOutputStream = new ByteArrayOutputStream(); folderIconBitmap.compress(Bitmap.CompressFormat.PNG, 0, folderIconByteArrayOutputStream); byte[] folderIconByteArray = folderIconByteArrayOutputStream.toByteArray(); @@ -630,15 +631,9 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma if (currentBookmarkIconRadioButton.isChecked()) { // Update the bookmark without changing the favorite icon. bookmarksDatabaseHandler.updateBookmark(selectedBookmarkDatabaseId, bookmarkNameString, bookmarkUrlString); - } else { // Update the bookmark and the favorite icon. - // Get the new favorite icon from the `Dialog` and convert it into a `Bitmap`. - ImageView newFavoriteIconImageView = (ImageView) dialogFragment.getDialog().findViewById(R.id.edit_bookmark_web_page_favorite_icon); - Drawable newFavoriteIconDrawable = newFavoriteIconImageView.getDrawable(); - Bitmap newFavoriteIconBitmap = ((BitmapDrawable) newFavoriteIconDrawable).getBitmap(); - - // Convert `newFavoriteIconBitmap` into a Byte Array. + } else { // Update the bookmark using the `WebView` favorite icon. ByteArrayOutputStream newFavoriteIconByteArrayOutputStream = new ByteArrayOutputStream(); - newFavoriteIconBitmap.compress(Bitmap.CompressFormat.PNG, 0, newFavoriteIconByteArrayOutputStream); + MainWebViewActivity.favoriteIcon.compress(Bitmap.CompressFormat.PNG, 0, newFavoriteIconByteArrayOutputStream); byte[] newFavoriteIconByteArray = newFavoriteIconByteArrayOutputStream.toByteArray(); // Update the bookmark and the favorite icon. @@ -676,11 +671,10 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // Get the `RadioButtons` from the `Dialog`. RadioButton currentFolderIconRadioButton = (RadioButton) dialogFragment.getDialog().findViewById(R.id.edit_folder_current_icon_radiobutton); RadioButton defaultFolderIconRadioButton = (RadioButton) dialogFragment.getDialog().findViewById(R.id.edit_folder_default_icon_radiobutton); - Bitmap folderIconBitmap; - // Prepare the favorite icon. + // Check if the favorite icon has changed. if (currentFolderIconRadioButton.isChecked()) { - // Update the folder name if it has changed. + // Update the folder name if it has changed without modifying the favorite icon. if (!newFolderNameString.equals(oldFolderNameString)) { bookmarksDatabaseHandler.updateFolder(selectedFolderDatabaseId, oldFolderNameString, newFolderNameString); @@ -688,13 +682,16 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma updateBookmarksListView(currentFolder); bookmarksListView.setSelection(selectedBookmarkPosition); } - } else { // Prepare the new favorite icon. + } else { // Update the folder icon. + // Get the new folder icon `Bitmap`. + Bitmap folderIconBitmap; if (defaultFolderIconRadioButton.isChecked()) { - // Get the default folder icon drawable and convert it to a `Bitmap`. `this` specifies the current context. - Drawable folderIconDrawable = ContextCompat.getDrawable(this, R.drawable.folder_blue_bitmap); + // Get the default folder icon `ImageView` from the `Drawable` and convert it to a `Bitmap`. + ImageView folderIconImageView = (ImageView) dialogFragment.getDialog().findViewById(R.id.edit_folder_default_icon); + Drawable folderIconDrawable = folderIconImageView.getDrawable(); BitmapDrawable folderIconBitmapDrawable = (BitmapDrawable) folderIconDrawable; folderIconBitmap = folderIconBitmapDrawable.getBitmap(); - } else { // Use the web page favorite icon. + } else { // Get the web page icon `ImageView` from the `Dialog`. folderIconBitmap = MainWebViewActivity.favoriteIcon; } diff --git a/app/src/main/java/com/stoutner/privacybrowser/EditBookmark.java b/app/src/main/java/com/stoutner/privacybrowser/EditBookmark.java index 8343ace2..61074703 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/EditBookmark.java +++ b/app/src/main/java/com/stoutner/privacybrowser/EditBookmark.java @@ -26,8 +26,6 @@ import android.content.DialogInterface; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; import android.os.Bundle; // If we don't use `android.support.v7.app.AlertDialog` instead of `android.app.AlertDialog` then the dialog will be covered by the keyboard. import android.support.v7.app.AlertDialog; diff --git a/app/src/main/java/com/stoutner/privacybrowser/EditBookmarkFolder.java b/app/src/main/java/com/stoutner/privacybrowser/EditBookmarkFolder.java index c27b963d..2becd6a1 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/EditBookmarkFolder.java +++ b/app/src/main/java/com/stoutner/privacybrowser/EditBookmarkFolder.java @@ -111,9 +111,9 @@ public class EditBookmarkFolder extends DialogFragment { currentIconImageView.setImageBitmap(currentIconBitmap); // Get a `Bitmap` of the favorite icon from `MainWebViewActivity` and display it in `edit_folder_web_page_favorite_icon`. - ImageView webPageFavoriteIcon = (ImageView) alertDialog.findViewById(R.id.edit_folder_web_page_favorite_icon); - assert webPageFavoriteIcon != null; // Remove the warning below that `webPageFavoriteIcon` might be null. - webPageFavoriteIcon.setImageBitmap(MainWebViewActivity.favoriteIcon); + ImageView webPageFavoriteIconImageView = (ImageView) alertDialog.findViewById(R.id.edit_folder_web_page_favorite_icon); + assert webPageFavoriteIconImageView != null; // Remove the warning below that `webPageFavoriteIcon` might be null. + webPageFavoriteIconImageView.setImageBitmap(MainWebViewActivity.favoriteIcon); // Load the text for `edit_folder_name_edittext`. EditText folderNameEditText = (EditText) alertDialog.findViewById(R.id.edit_folder_name_edittext); diff --git a/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java index f10c2e45..bdafa3c9 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java @@ -27,12 +27,15 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; +import android.support.v4.content.ContextCompat; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.SwipeRefreshLayout; @@ -413,6 +416,14 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // Load the initial website. mainWebView.loadUrl(formattedUrlString); + // Load the default favorite icon if it is null. + if (favoriteIcon == null) { + // We have to use `ContextCompat` until API >= 21. + Drawable favoriteIconDrawable = ContextCompat.getDrawable(getApplicationContext(), R.drawable.world); + BitmapDrawable favoriteIconBitmapDrawable = (BitmapDrawable) favoriteIconDrawable; + favoriteIcon = favoriteIconBitmapDrawable.getBitmap(); + } + // Initialize AdView for the free flavor and request an ad. If this is not the free flavor BannerAd.requestAd() does nothing. adView = findViewById(R.id.adView); BannerAd.requestAd(adView); diff --git a/app/src/main/res/drawable-hdpi/world.png b/app/src/main/res/drawable-hdpi/world.png new file mode 100644 index 0000000000000000000000000000000000000000..fcfe815fb38cf0997afd257f46a8740eee2c097a GIT binary patch literal 2884 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/world.png b/app/src/main/res/drawable-xhdpi/world.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba09e64a16f41f4bee3b0422c7d682f397049e4 GIT binary patch literal 4252 zcmV;N5M%F&P)EaUbC=if!A+ zx~{t_7K^R+Jnub3vnTteJ1h5yt9stiMrJi+N_gTX* zrWWnXG=LV{fGXRzZA*1`cb^X6T>sx`Xq|l?fM)Al9L*9RQC4*q%%#|E|Bke}9MaT|mbjkj-Y*^5x6VW9AHi^8j>p+J<=? z0B|=mkLkMp011r)=hq_k0JtfYN{zSM5p8vVZQH-Y%(nq}Upw<@BTq8(m4;#bW4khFivz~S z#*TMg_eKDl+m%NLVP+n89OtT`p`m@PR^IZ$u`KHo07d{D+iKm5%&SC{(KPKltyJ1F z2MiAnccs(mTbX%Ft8@ye_RpOfzA_QrQYw|cFf=q&ZiT{@I3Ss30Hm8#F-b(9nVOn< zm#*udkHunZi0A{tv<1U3?ytVkb^Sgf+96E)Ue|R$q-omC<#Kr?Gj9U$Txjbnq=@L- zmSt^dGCktWB(iP$a%LVwbIte_0N0euWxM)Amd$1rGhZW2zaPLK&wn!(i(Tb7&IJ%u z2+#AbW9HpNR0dGkwQJWmrl+R|nfZEDx~DKC0o-BRwx?;@H$$ckUx2o4uVd!B0VF~u zWdNq-xiC5{2r5Y}-DanZJqfg+EC|zpLx|=J|#1bCpof%ZCmf`dYmYJk^DCM89soy&$$*INjm2W8X`1$E ztcqsvS|Y01-8JB3$8mP%ayd~iA#y-EoxT;}9$>hXp$)Tmp7)m!6c!Pk zIWjULn#SN+5w&z}w8a$!aQaIL0k(pm@CbuWW#to^Ocn>Rln z!VUny;Nai{Gk;qkO7VDH+7hAb`WOJ|NDBZqTb5O~qSbUjE|*IvrM5x%FhWH4PEJmS zF$zS~ClnR;{qs>ujY;JE{#{HemAVeV15z^p+_r1iu9{QkH64&hBy+5sN~aPv)IgEEfA~eXzg* zzNZ$r6=9vuK)jh=_IvOM+st*vG@@9vT|j=Wnf%{vLd> zRx4QGfa&S!%K)sDXe1&llgT_JG+-8H7CC^K?+mNE22vf;N->LJ7~dx%Q8x!*<p}wn0Ius25j~9HS<3?e&QVH*c>r2~=Xr4e z4BiG-$~--a``Oa zmtD|D7SWg^5@!Ag;5(rDVu_A&4giqf|G$plna>vh+!Qg>zd~gnO(T8^;4dQPQ;*Le z_;gMQz#m4;=T8Bw2$1m(9z1wVJQjum~J*7(=^W_q7?yRs=K>;mGT`B2oXivgqlny-zgN`8zrAs z=q{B?Z;z5mh_YI(m|5fi*L5Q~fSKPR6kT)&#A2~X4gm0Di4ZfdRsbXpVApk@ie?i; z4p2%(-g93MW)|rVQCVt|OeTK<**d{$1whg@{Jc7M5dqPrF3d>~WgR4E9nuPwfEPi$9MKqfo+p~< zW9FtuA3?<9aj64Dl_h{*1PLgm(h9Nz7Lf}@DJ7~^U0q#mYXPNFNu-;IS}`jeSZ2&D zZUG0Q+aqh%#bU8-4p_EqnbZNTXaNTVGU-TX#FmJT0wAdst!R>x8i7ThZkP=0!wP3bG&As85DaN{PNy zi~8T1c%COc(b@si5$Spq0Ya~N7@32 zNPNVz2}BNV}S1ff4TAT#kA-M z;|JAf?sKQ3#}~<%BMxTXUj2L40p)V}PPAs>Wr@ZdbR1{)D>55DnM`IdjKKh4n&v}9^alZAM-$Q8GMP-2Pz5keb1e}`mIog+4C9Hg`Yp>Eg>cE1 znQxpQz-qywd@7aN3E;nk3U$k}&Xvf{g^0c@6m2>l=bXF(12XwYZJNchtaC8$*l7cv z*}He|-_Cz?fdl*t3vLlAB>*EqL5XT0`m)S?(eUta(^s6>wtW5oMV9rdk0_YHmxJoSd`(JT0_kg;HvJHk%c1anW^suTcLn>2x}D42LS7=dA@G zS;>29)22=0FqMALjXO}eR!hPY>2$hgWZ#;Fmd$1zX1)^gNFeKadwahql&!K$BE-zn zCcXe7lAin**;1ugEZ%@hY*7gw5nWmDDwMjl)-a665H46!)-+8+Dy)>+37La0uq^9W zL)ZZTux)z1}CB${Pe8;B@O{JK|N*Zo2xfrbtk7#Mhkhz23= zisD4H(=^QsB*H{=hfvPgwr!huyNYR=X=c_XvPvnD4Ssy<0_4$#nTRq$!K?z6X_|Hy zGykQ zmfSZZ^5*pP^k)Htc}R%?xZRItUU!(bapT6<0Z9Abt9R|%6<7en!^2(7{6`Xn%)Fyf z4b5h=%Cf94GqZ^hq5hfqhZ7SMqHz2o2l#Q@HlT9-hZJJwtZm!(`XP$zA?;IF6pO_x zf`oc{dOihUxlm`_ybFcGNxi+j_W@|whu7d2p66YX&1OYYD4}BH`|&RyLio+PFA~w^ znx_3j9lbvUaHc@dE6lvI-qp0GX{L$jIRGaLbUmu;`q_2tIhTkE%p7)4?3+aNVNKJX zlqLvuK0w#?9}&?f0EE55=@e#u*s?6ERU!W2Hx@JXzoHH7r-UDt}mGD38JYJGP<^l4_kb^e=<<9rRm3x$a2dLrUnE|)M(b0C#U{U<7$ z#+oVo5`c}(6h08~F0Ikg(T{qbw;Rphqy$t>6OIv)>0giX8FUnrjA~Ua_d!tiWB46a@|1jSJ;RS3B2z`-TEEan|0632G?+D%s zSfwQwx%u~>tqa@dFVGVuag{=$(CawPod8a6g}xBn%FI;jLY{U)ME?w6gQjUOMAjAE zoC?Fk!(BZ+JzpWBs2f|uuo#zl-aIieagB7GA4JQqv$bveVrI@me(}Tq7hYlJjA0m| zSI!#I@^iwPrrqUv-bw(&0K_5f-@<-ZIF%c--`U0h_+~& z_D}7~psgq64a0bBa&q!CBKjnN|88eqE#{|0G%z_i`CIKQe4vB(y=SvowS4*V_5NLt zl6^;u!PCrqOFEt2QEv&c)pX1ORs3m(b*MyYKOeGt#M;R;5#0@7ER)GR*y!T9cF=JL z%*D3tWBm(s`cat;?bL9x4B!!F-hSxNp}WG|QPye})d6!U6be0#F3 zqdZj3LqA4D50*-$`&$r#ttGr=95A2p@$qFdGc&6ItR|xO09eJ$?*x!0q7*9687Wi> yw}{GZN&Ef3_o7nZdpys3HknL58zl~CJNZ9#%>uLfj?*mw0000pmMAh9VtyoH zBKuY-8vE9uM&y4x&vWm2&VBBE&OP7ro^w9mH}RU80UN6TD*%Aa$Pi@#)wq8b3lntj zLb~=t6+@tokrfM6B3L}|Q2WFkL%To#E}HziU}aabDxrt`L3%fWEd8-TA+C2ZAS5J2 z-ut$1pu6iGjJ*F{&u5#O0sx$GG(ugq3eDdr2+u!fo!Jw;WE0{kd?gXTUeZhE6sF-m z7&yB8XzVxnA;y6bqKhG0jm3RPVWPcE?qm`)O5;d|$Gj%w*5>hZ7P~$X&BGgN|1Y+= z-k7Bt?jd<~J0=Egu1~C3T^Dge44}&^{>)ab7XJ4)3Q098uO7JKc~D5S4&G{6;+*w3 z|J3M>%YU&C5|;~f@bQ4%jdBJaCWzSLaES(iZADDx7f*_ExbTsxX9q>Vx(7u_2Y(iJ zYa%$(pzOHtb+M1&e0F<#`Cj^4#N|=+W`N4qW@l&hQWyBZDZp$sBg~Iq#$Y$;x7oTB zZoVX3>CSn=o@Q3@SgJ%8=8At+P>lHzc_j?67BGWt1p~}zDT8LC%^B~bn2vKBb zs!{dv0k9EBc++6dWYrC`sI*c#ll;nqqMXxWzMJWW&-K6M<3p?!s7vDw0sZx67|I^% z?aN`Jry}`K7Jd-t%I6?k+2qEahL#kUlauoWhv5=?1B!ekIa&cTRt>B#HiO2>a_`ws-@16Vm``J1Zyac)#g4PGJH}F5>Md%#!)~nTE8FL;0(KCcSAiQJ=iJaO}Y1b@(kxJUAl-Pa2Dp{YgW%i6J4b_U6p)h z?tPt~pMS^FM0GZB?X@|9z4>)&YHCYvr*_}9M?}-1QyVl_H8v_g?e$pgvfz}iwDJ)~ z_)C@qKDa%z5CDWy7cMeAKPb~28yyYmU%s>x8X<%$k|kJgT^?}5j_1;(lKjvo5k=Xb zup&lf7XBxR8`?r7!Ulcm(6T%DtNigEY%x*V6lK7d5D@Fi_b#to0+6k}lXGoToGX2O zeFO1cj5x0NeTq+BmV#+RkJ6_FSX(kajAte=2eWMEl2I`iO`(rZshZ+50_dWKe{ z7Tx?k;QOKOWpGGH$5`_4^#I%@!GwSxR?HXsiNYjaR=;+n=RkgZf0o?Lm4Oes@toDL zi}cSgytPZ2qq{8ea;i&P9}LPq*gX6b$N5l@QSxF1tC;*lou$)5{Z9-%{N5})FXQtp|K%$}InVD&q*pa3`+gEh9V(0vK$5ef`!`BDn9eycKr zZEl1!Hjff*9{icG(WF34z83z<(VOo>v}uTrdch{V#DRBuc7eFrIWRELf&TYWLk`Ub z$g%pFcUyLKbxDN;2V;(uzWXw~_G^{T?!SU_QJ;g|(M1+HTh&mn*yy~X77Z>@zm}Q# z`1ni%Z3&!vEhqf?`t#bgIaf+IxUK(fZ{U)_*u=!#Gvl(7D1qz3FvZ*y6(yx0RYcKJ z4|uG_J)}phJ$4~JZChD93%i(Rt&KXnOpLNsTbd?BiXoycZJ2Q}P|;2AU3|-dTM0Ti z4=0``#jvVNlE@(&Us?ilS2bgPvZQ^&c5tJX5L6DKp8MvN1I#!Ig%bGuGYu4OZfy-_ zgx`&hK6V08mCq~6T3To|7E-z8EqWtw#bJjxuJ$nCy}Sbhsf|@XjsLA{EmoJzs^Ned zZy%q7?Id2=zP!(3CFWJqVkNSe+B6Tv6-DY=fP5~>JVPk*pp;5<-(cC< zOifMol-P|(%I#o^9`uMFR`N?+r%TW1L`$BgzoU8>{8s@HjV`Ccv{~L*=<#z!n(7TK zV0klB7YwJW)(+&z5ip!8&+enUxHV#kB>Dq=Kn7(1!c zLqEy}FZMYnE}zT9XWvo@SH~Uk1kF;UUc;ftOk7rB9BN``XE&aEs-dnPWr$jWU1Mhx zFB$x`yL--dlZH{lEq!XzIcgkor6dPAMO$6}tHYSNs%})>0!A%DtlmwX>6IdcJ!p*^kc{8Zj?#Zr*0x7D1-8%qo3Ciu@Fb@2s!m zbSvN}I4ug#BnYgotz~AvXX`SAH5*wAla!$d6Dl*4SphouXFE-iyA}#mj)k4(BA1h# zLo`-5^ZvGkOr426PjFZl`!Z?6eUVC&eU7vnMWLMKf`{L-yV#9Cgyoldk!rn^!itN8 z>MO0PU?d~f5{xOWPa7rUSNL5jT?!J8N;{-ob0}uOQAbvG-_AK#a?K|vB?*D0OU~_w zkCT1^+>ML(;ENBV?>YUttreDhN0rreMsbvboxO0`z#IM~lt13qrK}|iE<-$ILoa~B zrI!f-btk%tdLL;_$Ky(>r_#JA5E>;ySo2SzvbdQJDNH zKq+BH(fsRp6uf=&PpLw~ZngmmbLl|(`CY-Zd*3TvD6+6qFF$f$A9@mD{7*}y0I4#m z&qmIDq8-32Fp@f4k;msiZ z5t7|yX5W>3xK^1umNV82*k`2L@BXwSe@V1o>fq;+UbN36#ig2+Sqyn8spEi7rVrWh zX73VJZsF`l$rSMB#=6p|`tc`n%#c@5XW$qEvkQgLH*HzUiq0t%Ze^S#IQ5Y0K#py| zQy;7JiTbJam};9>Vf1{ebj`Kl+&%@zzeo-c7)<7qa_AZUhp}@XR~VmID1u?#vQh-T zDNq0dfFz&_^-Nh`3HPzei$ETyqToCA089i|be>$jyvBPp6}9YNGOt zO{s?i?EdY zwo!)Bp9i-r(=H@(>V$1|tPx{+j*Ub&phZM706-MJGV?#gB_8sZDp9`Q+grtVgRSHy zkcjGK_6UaUNqJdq)JaAzBPlsMxi^aQYE1FE?whpjuW7IMc8}(SoGi^7!i`=gJ+1iyd!Si0H*SOH| z{C-IquJjh(D;h?7W&0p~sUI4SxVX5rAPnm0KD`bW=B-9Ob17dUY`wPqhjD6hjTb^+}rfBentha(~8OYvqL*ipSoS6`LjWgc4_=Q1W5@ zsaLT)S-E%%UayKS21e%~$rXif&w# z4F1Ca;1*`|woLVr)P!pahGmAjEiWU~Ok*6bOV+McX?~7h0rhj;X)f5Q-jw^1k&%!h zGPVynOMJuuqJN+mXiGPNOX9if-LxvO?P-T;ag@*Cm754I6A~p?tXg>GmDihUWNR#`aT$oe<7qjqLi7jAt44|F_OgAPGiqxa^diuVSbr6G3QHc_}J&S3r? z(vroFS%2r%uC=m&i~ZBAy)V)lABiiJVWR$NXF1Sp~A`!!tIq_wDQomoGOn{?tJGl9BgR zm6TF4i}?e=CI2rUs&cGK-8hFLA#37(-Q{$wj?)C2##q>+RYYl+(RiddBk(7qG>cM5rKpq7M$}-X*Y_4RkGycig)jh zR6&%~1xft!+~KOc{>3xC^rC_+)Clc@Iq2ZD<%upSEp_i>>{wZ4x>^0Qrm?vAs`WiZ znUN6_`r&sR<5mSbS~X=I^(U!V0N= zyxoBEI3*>b-+cRJb`sX4_q5c1WGLA1hGm}&4quEw{^L5&tdA8UIkLZ6!!aZMCT}7N z$+mZNONxVy?bY=RMgWDn#P+W#f?UCIGavNJp&YnhGWdfkH%Q*&K&9#?y6~U0Lr>!Z zt6^ByC1>RPLJTK4LJvasYncYF4C%AxOT^8Jh~<3k^W1i2qJ)sp(BDzk1(3I-BVnq3 zqJkQ2!=mi_h;>RTDzgmQ${NyK*PHxiL~OZKOanPd4_J*a8AC3~65=Sx&bUx8tR;f2 zL}JE1%swj^hI6p?xKg;XwdL$QkO;AugM&kAZtHWTUd{gki!gTei15-cm75?Eg#yPqHH7szzbW9XI%?EBKy; zXV-GDS+TjcVH_65q4l!7sN><$(epyCn3;VD9E3k^DCYpKSIVc{eOs1H?%N@YI=D%v zhi#4?Nn)cu5;g)caczJpQ`RR+Nx-_0Kc(AE#A5z=vv4b2ty)0$Zr}blmjs6_k zvo!RSYND1RwVpswG0->kHc7Xxz}mq<;?>x7TKpFq9F~kqASZYb#f~6jC0MBc3L$pReu1 zHgHT4oW@bii0nNN4SqOrVCJgBnO+ZwJ%eS4IW096zt{v-E_!);PthG0aKP=WhiSNj zr;_(JztGee8up_V5yvtGX3;N46HQG`f6-s7 z$_{V!h_WQ7MxQZ32*VtuKd_^9=(lqZ4i22NbCif|@gGI(*r6$r5Yc>?kidPdx^y?p z$;qi|@+uTRkV%;V5!|pKB-hcc(9q^j=1bx%y5OIc&!q)`hYUl)K!JKhK5T)kYotyk zWVO%u$Y$1|;7@e3p_TGu`oqEA+QQ!6-XMLNypt|!VwD)Rw>Suq={XXldwE-n-hGH$ zPEXIwl*wkHCDS~HX7#%`t|DVAq)|b&oZr>@>%*WTc{yv1sCpGyeFB`jtf*K|ocs?O z!PvFs2vFDK_T~gf_df)Nx-ZCWV*E-=U5Jpz4=~dS!1Qvt&- z=-c&UxUk4!rBBYO$FEyk!xK5bdrAvSsR{X>>bkMf*Z_G!HPA0Ag0xAJQZoHxc&&hg zVI7br6~aVt986ycJ;&g8Lb>-`@HtPxMe!imd?l30A}=56NetC*OX{Y6XqyG9oth{5eo z0dgCg7;oUu#FH+MYS)Y|p)TFg+2Zq`o=lj=CcK_{Pe!3CtY^|L{HDhxpXv&|jF#YS zQIzZV(RWqenlxSxKfTR|aON9l%HClp+z6CWx&5Wtvo~ELGH_`C13x%RCOdSZaj-9( zk9%e=wf}a@oN)A(ndKt*MRRH=<({>%|8>fDu?TroBzaGqjcNC z@s(`_u1KSaJ&|mrvLiN*9sq=;x%r?PIYJpHF-DML;ER`ydgaPzZZnf}9h*X*(oX=-ISf9;GY|yYRq||N=IEQh2IP-I2?eXFdaF48 z4N&T#m^=CT^XG@TEo`JImZs1$k((IGAH4MG$30CS^_OiP*nI;FZ~R)>Nr~hLbwrUq zD!Iy=196;$S3yuIP}Z*JNPpQX&u$4kUD?3m67F3kln7pK|(0N_u!)}HjO4uMaYx6JX+N5w#0 wm{uK_>?Lb}wt3>_KCi6Jde!2b#fiTn{tr1O4x((HLdj@gq-Tbz)p3daKlZ=xZU6uP literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/folder_dark_blue.xml b/app/src/main/res/drawable/folder_dark_blue.xml similarity index 100% rename from app/src/main/res/drawable-mdpi/folder_dark_blue.xml rename to app/src/main/res/drawable/folder_dark_blue.xml diff --git a/app/src/main/res/drawable/world.xml b/app/src/main/res/drawable/world.xml deleted file mode 100644 index a472dca2..00000000 --- a/app/src/main/res/drawable/world.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file -- 2.45.2