diff options
| author | Tanuj M <thetanuj@hotmail.com> | 2020-08-11 16:37:56 +0530 |
|---|---|---|
| committer | Tanuj M <thetanuj@hotmail.com> | 2020-08-11 16:37:56 +0530 |
| commit | 028abf4bb731b5d6dcb77d2b893071a6eb2797ae (patch) | |
| tree | e828a52915633eac913486d45b112b14858ba5cd /app | |
| parent | 942b843fe11e7fd5316be74a3480c6a53eaaf168 (diff) | |
| download | SidePhOnelauncher-028abf4bb731b5d6dcb77d2b893071a6eb2797ae.tar.gz SidePhOnelauncher-028abf4bb731b5d6dcb77d2b893071a6eb2797ae.tar.bz2 SidePhOnelauncher-028abf4bb731b5d6dcb77d2b893071a6eb2797ae.zip | |
Setting up wallpaper from url
Diffstat (limited to 'app')
| -rw-r--r-- | app/src/main/AndroidManifest.xml | 1 | ||||
| -rw-r--r-- | app/src/main/java/app/olauncher/MainActivity.kt | 3 | ||||
| -rw-r--r-- | app/src/main/java/app/olauncher/helper/MainViewModel.kt | 19 | ||||
| -rw-r--r-- | app/src/main/java/app/olauncher/helper/Utils.kt | 44 | ||||
| -rw-r--r-- | app/src/main/java/app/olauncher/ui/MainFragment.kt | 8 | ||||
| -rw-r--r-- | app/src/main/res/layout/main_fragment.xml | 8 |
6 files changed, 81 insertions, 2 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 903a184..580bd70 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ <uses-permission android:name="android.permission.SET_WALLPAPER" /> <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> + <uses-permission android:name="android.permission.INTERNET" /> <!--For device lock feature--> <uses-permission android:name="android.permission.CALL_PHONE" /> diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index 51008b8..29325ba 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -62,6 +62,9 @@ class MainActivity : AppCompatActivity() { viewModel.launcherResetFailed.observe(this, Observer { openLauncherChooser(it) }) + viewModel.refreshWallpaper.observe(this, Observer { + setWallpaper() + }) } private fun setWallpaper() { diff --git a/app/src/main/java/app/olauncher/helper/MainViewModel.kt b/app/src/main/java/app/olauncher/helper/MainViewModel.kt index a2de944..7a14c96 100644 --- a/app/src/main/java/app/olauncher/helper/MainViewModel.kt +++ b/app/src/main/java/app/olauncher/helper/MainViewModel.kt @@ -1,6 +1,7 @@ package app.olauncher.helper import android.app.Application +import android.app.WallpaperManager import android.content.Context import android.content.Intent import androidx.appcompat.app.AppCompatDelegate @@ -23,6 +24,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { val isOlauncherDefault = MutableLiveData<Boolean>() val launcherResetFailed = MutableLiveData<Boolean>() val isDarkModeOn = MutableLiveData<Boolean>() + val refreshWallpaper = MutableLiveData<Any>() fun selectedApp(appModel: AppModel, flag: Int) { when (flag) { @@ -110,6 +112,23 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { else AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) isDarkModeOn.value = prefs.darkModeOn } + + fun setWallpaper(width: Int, height: Int, url: String) { + viewModelScope.launch { + val originalImageBitmap = getBitmapFromURL(url) + val wallpaperManager = WallpaperManager.getInstance(appContext) + val scaledBitmap = getWallpaperBitmap(originalImageBitmap, width, height) + + try { + wallpaperManager.setBitmap(scaledBitmap) + originalImageBitmap.recycle() + scaledBitmap.recycle() + refreshWallpaper.value = Unit + } catch (e: Exception) { + + } + } + } } data class AppModelWithFlag( diff --git a/app/src/main/java/app/olauncher/helper/Utils.kt b/app/src/main/java/app/olauncher/helper/Utils.kt index b87a0b9..308707e 100644 --- a/app/src/main/java/app/olauncher/helper/Utils.kt +++ b/app/src/main/java/app/olauncher/helper/Utils.kt @@ -5,7 +5,7 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.PackageManager -import android.graphics.Bitmap +import android.graphics.* import android.net.Uri import android.provider.Settings import android.widget.Toast @@ -14,6 +14,9 @@ import app.olauncher.R import app.olauncher.data.AppModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import java.io.InputStream +import java.net.HttpURLConnection +import java.net.URL import java.util.* fun showToastLong(context: Context, message: String) { @@ -111,4 +114,41 @@ fun openAppInfo(context: Context, packageName: String) { intent.addCategory(Intent.CATEGORY_DEFAULT) intent.data = Uri.parse("package:$packageName") context.startActivity(intent) -}
\ No newline at end of file +} + +suspend fun getBitmapFromURL(src: String?): Bitmap { + return withContext(Dispatchers.IO) { + val url = URL(src) + val connection: HttpURLConnection = url + .openConnection() as HttpURLConnection + connection.doInput = true + connection.connect() + val input: InputStream = connection.inputStream + BitmapFactory.decodeStream(input) + } +} + +suspend fun getWallpaperBitmap(originalImage: Bitmap, width: Int, height: Int): Bitmap { + return withContext(Dispatchers.IO) { + val background = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + + val originalWidth: Float = originalImage.width.toFloat() + val originalHeight: Float = originalImage.height.toFloat() + + val canvas = Canvas(background) + val scale: Float = height / originalHeight + + val xTranslation: Float = (width - originalWidth * scale) / 2.0f + val yTranslation = 0.0f + + val transformation = Matrix() + transformation.postTranslate(xTranslation, yTranslation) + transformation.preScale(scale, scale) + + val paint = Paint() + paint.isFilterBitmap = true + canvas.drawBitmap(originalImage, transformation, paint) + + background + } +} diff --git a/app/src/main/java/app/olauncher/ui/MainFragment.kt b/app/src/main/java/app/olauncher/ui/MainFragment.kt index 80152fa..8b3c6ac 100644 --- a/app/src/main/java/app/olauncher/ui/MainFragment.kt +++ b/app/src/main/java/app/olauncher/ui/MainFragment.kt @@ -5,6 +5,7 @@ import android.app.admin.DevicePolicyManager import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.content.res.Resources import android.os.Bundle import android.provider.AlarmClock import android.provider.MediaStore @@ -137,6 +138,7 @@ class MainFragment : Fragment(), View.OnClickListener, View.OnLongClickListener } private fun initClickListeners() { + wallpaper.setOnClickListener(this) homeApp1.setOnClickListener(this) homeApp2.setOnClickListener(this) homeApp3.setOnClickListener(this) @@ -172,6 +174,12 @@ class MainFragment : Fragment(), View.OnClickListener, View.OnLongClickListener override fun onClick(view: View) { when (view.id) { + R.id.wallpaper -> { + val width = Resources.getSystem().displayMetrics.widthPixels + val height = Resources.getSystem().displayMetrics.heightPixels + viewModel.setWallpaper(width, height, "https://images.unsplash.com/photo-1516410529446-2c777cb7366d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1834&q=80") + } + R.id.homeApp1 -> if (prefs.appPackage1.isEmpty()) onLongClick(view) else launchAppEvent(prefs.appName1, prefs.appPackage1) diff --git a/app/src/main/res/layout/main_fragment.xml b/app/src/main/res/layout/main_fragment.xml index 9d595f1..4f8a770 100644 --- a/app/src/main/res/layout/main_fragment.xml +++ b/app/src/main/res/layout/main_fragment.xml @@ -119,4 +119,12 @@ android:text="@string/set_as_default_launcher" android:visibility="gone" /> + <TextView + android:id="@+id/wallpaper" + style="@style/TextSmallLight" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="24dp" + android:text="Wallpaper" /> + </LinearLayout>
\ No newline at end of file |
