mirror of
https://github.com/Michatec/michas-droid.git
synced 2026-05-30 18:02:43 +02:00
- Renamed the package Name
- Update some features - Fix some bugs
This commit is contained in:
+2
-2
@@ -13,11 +13,11 @@ buildscript {
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace 'nya.kitsunyan.foxydroid'
|
namespace 'com.michatec.store'
|
||||||
compileSdk 36
|
compileSdk 36
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId 'nya.kitsunyan.foxydroid'
|
applicationId 'com.michatec.store'
|
||||||
minSdk 30
|
minSdk 30
|
||||||
targetSdk 36
|
targetSdk 36
|
||||||
versionCode 15
|
versionCode 15
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
@@ -4,18 +4,18 @@
|
|||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||||
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent>
|
</intent>
|
||||||
|
<package android:name="com.android.vending" />
|
||||||
</queries>
|
</queries>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid
|
package com.michatec.store
|
||||||
|
|
||||||
object Common {
|
object Common {
|
||||||
const val NOTIFICATION_CHANNEL_SYNCING = "syncing"
|
const val NOTIFICATION_CHANNEL_SYNCING = "syncing"
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
package nya.kitsunyan.foxydroid
|
package com.michatec.store
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import nya.kitsunyan.foxydroid.screen.ScreenActivity
|
import com.michatec.store.screen.ScreenActivity
|
||||||
|
|
||||||
class MainActivity: ScreenActivity() {
|
class MainActivity: ScreenActivity() {
|
||||||
companion object {
|
companion object {
|
||||||
+14
-13
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid
|
package com.michatec.store
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
@@ -13,18 +13,18 @@ import android.content.pm.PackageInfo
|
|||||||
import com.squareup.picasso.OkHttp3Downloader
|
import com.squareup.picasso.OkHttp3Downloader
|
||||||
import com.squareup.picasso.Picasso
|
import com.squareup.picasso.Picasso
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import nya.kitsunyan.foxydroid.content.Cache
|
import com.michatec.store.content.Cache
|
||||||
import nya.kitsunyan.foxydroid.content.Preferences
|
import com.michatec.store.content.Preferences
|
||||||
import nya.kitsunyan.foxydroid.content.ProductPreferences
|
import com.michatec.store.content.ProductPreferences
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.InstalledItem
|
import com.michatec.store.entity.InstalledItem
|
||||||
import nya.kitsunyan.foxydroid.index.RepositoryUpdater
|
import com.michatec.store.index.RepositoryUpdater
|
||||||
import nya.kitsunyan.foxydroid.network.Downloader
|
import com.michatec.store.network.Downloader
|
||||||
import nya.kitsunyan.foxydroid.network.PicassoDownloader
|
import com.michatec.store.network.PicassoDownloader
|
||||||
import nya.kitsunyan.foxydroid.service.Connection
|
import com.michatec.store.service.Connection
|
||||||
import nya.kitsunyan.foxydroid.service.SyncService
|
import com.michatec.store.service.SyncService
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.net.Proxy
|
import java.net.Proxy
|
||||||
|
|
||||||
@@ -61,6 +61,7 @@ class MainApplication: Application() {
|
|||||||
updateSyncJob(false)
|
updateSyncJob(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("QueryPermissionsNeeded")
|
||||||
private fun listenApplications() {
|
private fun listenApplications() {
|
||||||
registerReceiver(object: BroadcastReceiver() {
|
registerReceiver(object: BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.content
|
package com.michatec.store.content
|
||||||
|
|
||||||
import android.content.ContentProvider
|
import android.content.ContentProvider
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
@@ -10,7 +10,7 @@ import android.net.Uri
|
|||||||
import android.os.ParcelFileDescriptor
|
import android.os.ParcelFileDescriptor
|
||||||
import android.provider.OpenableColumns
|
import android.provider.OpenableColumns
|
||||||
import android.system.Os
|
import android.system.Os
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import kotlin.concurrent.thread
|
import kotlin.concurrent.thread
|
||||||
+4
-4
@@ -1,13 +1,13 @@
|
|||||||
package nya.kitsunyan.foxydroid.content
|
package com.michatec.store.content
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
import com.michatec.store.entity.ProductItem
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import java.net.Proxy
|
import java.net.Proxy
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
|
|
||||||
+10
-12
@@ -1,15 +1,14 @@
|
|||||||
package nya.kitsunyan.foxydroid.content
|
package com.michatec.store.content
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductPreference
|
import com.michatec.store.entity.ProductPreference
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.nio.charset.Charset
|
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
|
|
||||||
object ProductPreferences {
|
object ProductPreferences {
|
||||||
@@ -57,15 +56,14 @@ object ProductPreferences {
|
|||||||
|
|
||||||
operator fun set(packageName: String, productPreference: ProductPreference) {
|
operator fun set(packageName: String, productPreference: ProductPreference) {
|
||||||
val oldProductPreference = this[packageName]
|
val oldProductPreference = this[packageName]
|
||||||
|
val json = ByteArrayOutputStream().apply {
|
||||||
|
Json.factory.createGenerator(this).use { it.writeDictionary(productPreference::serialize) }
|
||||||
|
}.toByteArray().toString(Charsets.UTF_8)
|
||||||
|
|
||||||
preferences.edit {
|
preferences.edit {
|
||||||
putString(
|
putString(packageName, json)
|
||||||
packageName, ByteArrayOutputStream()
|
|
||||||
.apply {
|
|
||||||
Json.factory.createGenerator(this)
|
|
||||||
.use { it.writeDictionary(productPreference::serialize) }
|
|
||||||
}
|
|
||||||
.toByteArray().toString(Charset.defaultCharset()))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldProductPreference.ignoreUpdates != productPreference.ignoreUpdates ||
|
if (oldProductPreference.ignoreUpdates != productPreference.ignoreUpdates ||
|
||||||
oldProductPreference.ignoreVersionCode != productPreference.ignoreVersionCode) {
|
oldProductPreference.ignoreVersionCode != productPreference.ignoreVersionCode) {
|
||||||
subject.onNext(Pair(packageName, productPreference.databaseVersionCode))
|
subject.onNext(Pair(packageName, productPreference.databaseVersionCode))
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.database
|
package com.michatec.store.database
|
||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
@@ -7,7 +7,7 @@ import androidx.lifecycle.ViewModel
|
|||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.loader.app.LoaderManager
|
import androidx.loader.app.LoaderManager
|
||||||
import androidx.loader.content.Loader
|
import androidx.loader.content.Loader
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
import com.michatec.store.entity.ProductItem
|
||||||
|
|
||||||
class CursorOwner: Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
|
class CursorOwner: Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
|
||||||
sealed class Request {
|
sealed class Request {
|
||||||
+8
-8
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.database
|
package com.michatec.store.database
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -9,12 +9,12 @@ import android.os.CancellationSignal
|
|||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import nya.kitsunyan.foxydroid.entity.InstalledItem
|
import com.michatec.store.entity.InstalledItem
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
import com.michatec.store.entity.ProductItem
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import androidx.core.database.sqlite.transaction
|
import androidx.core.database.sqlite.transaction
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ object Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Helper(context: Context): SQLiteOpenHelper(context, "foxydroid", null, 1) {
|
private class Helper(context: Context): SQLiteOpenHelper(context, "store", null, 1) {
|
||||||
var created = false
|
var created = false
|
||||||
private set
|
private set
|
||||||
var updated = false
|
var updated = false
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.database
|
package com.michatec.store.database
|
||||||
|
|
||||||
import android.database.ContentObserver
|
import android.database.ContentObserver
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
+4
-4
@@ -1,11 +1,11 @@
|
|||||||
package nya.kitsunyan.foxydroid.database
|
package com.michatec.store.database
|
||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import android.os.CancellationSignal
|
import android.os.CancellationSignal
|
||||||
import nya.kitsunyan.foxydroid.BuildConfig
|
import com.michatec.store.BuildConfig
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
|
|
||||||
class QueryBuilder {
|
class QueryBuilder {
|
||||||
companion object {
|
companion object {
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.database
|
package com.michatec.store.database
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
package nya.kitsunyan.foxydroid.entity
|
package com.michatec.store.entity
|
||||||
|
|
||||||
class InstalledItem(val packageName: String, val version: String, val versionCode: Long, val signature: String)
|
class InstalledItem(val packageName: String, val version: String, val versionCode: Long, val signature: String)
|
||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
package nya.kitsunyan.foxydroid.entity
|
package com.michatec.store.entity
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import com.fasterxml.jackson.core.JsonToken
|
import com.fasterxml.jackson.core.JsonToken
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
|
|
||||||
data class Product(val repositoryId: Long, val packageName: String, val name: String, val summary: String,
|
data class Product(val repositoryId: Long, val packageName: String, val name: String, val summary: String,
|
||||||
val description: String, val whatsNew: String, val icon: String, val metadataIcon: String, val author: Author,
|
val description: String, val whatsNew: String, val icon: String, val metadataIcon: String, val author: Author,
|
||||||
+4
-4
@@ -1,11 +1,11 @@
|
|||||||
package nya.kitsunyan.foxydroid.entity
|
package com.michatec.store.entity
|
||||||
|
|
||||||
import android.os.Parcel
|
import android.os.Parcel
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.utility.KParcelable
|
import com.michatec.store.utility.KParcelable
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
|
|
||||||
data class ProductItem(val repositoryId: Long, val packageName: String, val name: String, val summary: String,
|
data class ProductItem(val repositoryId: Long, val packageName: String, val name: String, val summary: String,
|
||||||
val icon: String, val metadataIcon: String, val version: String, val installedVersion: String,
|
val icon: String, val metadataIcon: String, val version: String, val installedVersion: String,
|
||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
package nya.kitsunyan.foxydroid.entity
|
package com.michatec.store.entity
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
|
|
||||||
data class ProductPreference(val ignoreUpdates: Boolean, val ignoreVersionCode: Long) {
|
data class ProductPreference(val ignoreUpdates: Boolean, val ignoreVersionCode: Long) {
|
||||||
fun shouldIgnoreUpdate(versionCode: Long): Boolean {
|
fun shouldIgnoreUpdate(versionCode: Long): Boolean {
|
||||||
+2
-2
@@ -1,9 +1,9 @@
|
|||||||
package nya.kitsunyan.foxydroid.entity
|
package com.michatec.store.entity
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import com.fasterxml.jackson.core.JsonToken
|
import com.fasterxml.jackson.core.JsonToken
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
|
||||||
data class Release(val selected: Boolean, val version: String, val versionCode: Long,
|
data class Release(val selected: Boolean, val version: String, val versionCode: Long,
|
||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
package nya.kitsunyan.foxydroid.entity
|
package com.michatec.store.entity
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
|
|
||||||
data class Repository(
|
data class Repository(
|
||||||
val id: Long, val address: String, val mirrors: List<String>,
|
val id: Long, val address: String, val mirrors: List<String>,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.graphics
|
package com.michatec.store.graphics
|
||||||
|
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.graphics
|
package com.michatec.store.graphics
|
||||||
|
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
+4
-4
@@ -1,8 +1,8 @@
|
|||||||
package nya.kitsunyan.foxydroid.index
|
package com.michatec.store.index
|
||||||
|
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import com.michatec.store.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import org.xml.sax.Attributes
|
import org.xml.sax.Attributes
|
||||||
import org.xml.sax.helpers.DefaultHandler
|
import org.xml.sax.helpers.DefaultHandler
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
+5
-5
@@ -1,12 +1,12 @@
|
|||||||
package nya.kitsunyan.foxydroid.index
|
package com.michatec.store.index
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import com.fasterxml.jackson.core.JsonToken
|
import com.fasterxml.jackson.core.JsonToken
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import com.michatec.store.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.Closeable
|
import java.io.Closeable
|
||||||
import java.io.File
|
import java.io.File
|
||||||
+6
-6
@@ -1,12 +1,12 @@
|
|||||||
package nya.kitsunyan.foxydroid.index
|
package com.michatec.store.index
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import com.fasterxml.jackson.core.JsonToken
|
import com.fasterxml.jackson.core.JsonToken
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import com.michatec.store.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.json.*
|
import com.michatec.store.utility.extension.json.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
object IndexV1Parser {
|
object IndexV1Parser {
|
||||||
+12
-12
@@ -1,21 +1,21 @@
|
|||||||
package nya.kitsunyan.foxydroid.index
|
package com.michatec.store.index
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.core.Single
|
import io.reactivex.rxjava3.core.Single
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import nya.kitsunyan.foxydroid.content.Cache
|
import com.michatec.store.content.Cache
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import com.michatec.store.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.network.Downloader
|
import com.michatec.store.network.Downloader
|
||||||
import nya.kitsunyan.foxydroid.utility.ProgressInputStream
|
import com.michatec.store.utility.ProgressInputStream
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import com.michatec.store.utility.RxUtils
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import org.xml.sax.InputSource
|
import org.xml.sax.InputSource
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.security.cert.X509Certificate
|
import java.security.cert.X509Certificate
|
||||||
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
package nya.kitsunyan.foxydroid.network
|
package com.michatec.store.network
|
||||||
|
|
||||||
import io.reactivex.rxjava3.core.Single
|
import io.reactivex.rxjava3.core.Single
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import nya.kitsunyan.foxydroid.utility.ProgressInputStream
|
import com.michatec.store.utility.ProgressInputStream
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import com.michatec.store.utility.RxUtils
|
||||||
import okhttp3.Cache
|
import okhttp3.Cache
|
||||||
import okhttp3.Call
|
import okhttp3.Call
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
+4
-4
@@ -1,11 +1,11 @@
|
|||||||
package nya.kitsunyan.foxydroid.network
|
package com.michatec.store.network
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import okhttp3.Cache
|
import okhttp3.Cache
|
||||||
import okhttp3.Call
|
import okhttp3.Call
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
+11
-11
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
@@ -24,16 +24,16 @@ import io.reactivex.rxjava3.core.Observable
|
|||||||
import io.reactivex.rxjava3.core.Single
|
import io.reactivex.rxjava3.core.Single
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.network.Downloader
|
import com.michatec.store.network.Downloader
|
||||||
import nya.kitsunyan.foxydroid.service.Connection
|
import com.michatec.store.service.Connection
|
||||||
import nya.kitsunyan.foxydroid.service.SyncService
|
import com.michatec.store.service.SyncService
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import com.michatec.store.utility.RxUtils
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
+7
-7
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.ActivityNotFoundException
|
import android.content.ActivityNotFoundException
|
||||||
@@ -9,12 +9,12 @@ import android.os.Parcel
|
|||||||
import androidx.core.os.BundleCompat
|
import androidx.core.os.BundleCompat
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.FragmentManager
|
import androidx.fragment.app.FragmentManager
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import com.michatec.store.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.utility.KParcelable
|
import com.michatec.store.utility.KParcelable
|
||||||
import nya.kitsunyan.foxydroid.utility.PackageItemResolver
|
import com.michatec.store.utility.PackageItemResolver
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
|
||||||
class MessageDialog(): DialogFragment() {
|
class MessageDialog(): DialogFragment() {
|
||||||
+4
-4
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
@@ -20,9 +20,9 @@ import android.widget.Toolbar
|
|||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.content.Preferences
|
import com.michatec.store.content.Preferences
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import androidx.core.view.isNotEmpty
|
import androidx.core.view.isNotEmpty
|
||||||
|
|
||||||
class PreferencesFragment: ScreenFragment() {
|
class PreferencesFragment: ScreenFragment() {
|
||||||
+21
-21
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
@@ -40,25 +40,25 @@ import androidx.core.text.HtmlCompat
|
|||||||
import androidx.core.text.util.LinkifyCompat
|
import androidx.core.text.util.LinkifyCompat
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.content.Preferences
|
import com.michatec.store.content.Preferences
|
||||||
import nya.kitsunyan.foxydroid.content.ProductPreferences
|
import com.michatec.store.content.ProductPreferences
|
||||||
import nya.kitsunyan.foxydroid.entity.InstalledItem
|
import com.michatec.store.entity.InstalledItem
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductPreference
|
import com.michatec.store.entity.ProductPreference
|
||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import com.michatec.store.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.graphics.PaddingDrawable
|
import com.michatec.store.graphics.PaddingDrawable
|
||||||
import nya.kitsunyan.foxydroid.network.PicassoDownloader
|
import com.michatec.store.network.PicassoDownloader
|
||||||
import nya.kitsunyan.foxydroid.utility.KParcelable
|
import com.michatec.store.utility.KParcelable
|
||||||
import nya.kitsunyan.foxydroid.utility.PackageItemResolver
|
import com.michatec.store.utility.PackageItemResolver
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import nya.kitsunyan.foxydroid.widget.ClickableMovementMethod
|
import com.michatec.store.widget.ClickableMovementMethod
|
||||||
import nya.kitsunyan.foxydroid.widget.DividerItemDecoration
|
import com.michatec.store.widget.DividerItemDecoration
|
||||||
import nya.kitsunyan.foxydroid.widget.StableRecyclerAdapter
|
import com.michatec.store.widget.StableRecyclerAdapter
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
@@ -892,7 +892,7 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
|
|||||||
}
|
}
|
||||||
ProductPreferences[switchItem.packageName] = productPreference
|
ProductPreferences[switchItem.packageName] = productPreference
|
||||||
items.asSequence().mapIndexedNotNull { index, item -> if (item is Item.HeaderItem ||
|
items.asSequence().mapIndexedNotNull { index, item -> if (item is Item.HeaderItem ||
|
||||||
item is Item.SectionItem) index else null }.forEach { notifyItemChanged(it, Payload.REFRESH) }
|
item is Item.SectionItem || item is Item.SwitchItem) index else null }.forEach { notifyItemChanged(it, Payload.REFRESH) }
|
||||||
callbacks.onPreferenceChanged(productPreference)
|
callbacks.onPreferenceChanged(productPreference)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+18
-21
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.ActivityNotFoundException
|
import android.content.ActivityNotFoundException
|
||||||
@@ -24,20 +24,20 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.content.ProductPreferences
|
import com.michatec.store.content.ProductPreferences
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.InstalledItem
|
import com.michatec.store.entity.InstalledItem
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductPreference
|
import com.michatec.store.entity.ProductPreference
|
||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import com.michatec.store.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.service.Connection
|
import com.michatec.store.service.Connection
|
||||||
import nya.kitsunyan.foxydroid.service.DownloadService
|
import com.michatec.store.service.DownloadService
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import com.michatec.store.utility.RxUtils
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.widget.DividerItemDecoration
|
import com.michatec.store.widget.DividerItemDecoration
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
|
||||||
class ProductFragment(): ScreenFragment(), ProductAdapter.Callbacks {
|
class ProductFragment(): ScreenFragment(), ProductAdapter.Callbacks {
|
||||||
@@ -271,8 +271,8 @@ class ProductFragment(): ScreenFragment(), ProductAdapter.Callbacks {
|
|||||||
|
|
||||||
val toolbar = toolbar
|
val toolbar = toolbar
|
||||||
if (toolbar != null) {
|
if (toolbar != null) {
|
||||||
for (action in sequenceOf(Action.INSTALL, Action.UPDATE, Action.UNINSTALL)) {
|
for (action in sequenceOf(Action.INSTALL, Action.UPDATE, Action.UNINSTALL)) {
|
||||||
toolbar.menu.findItem(action.id).isEnabled = !downloading
|
toolbar.menu.findItem(action.id).isEnabled = !downloading
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.actions = Pair(actions, primaryAction)
|
this.actions = Pair(actions, primaryAction)
|
||||||
@@ -349,7 +349,6 @@ class ProductFragment(): ScreenFragment(), ProductAdapter.Callbacks {
|
|||||||
if (productRepository != null && release != null && binder != null) {
|
if (productRepository != null && release != null && binder != null) {
|
||||||
binder.enqueue(packageName, productRepository.first.name, productRepository.second, release)
|
binder.enqueue(packageName, productRepository.first.name, productRepository.second, release)
|
||||||
}
|
}
|
||||||
Unit
|
|
||||||
}
|
}
|
||||||
ProductAdapter.Action.LAUNCH -> {
|
ProductAdapter.Action.LAUNCH -> {
|
||||||
val launcherActivities = installed?.launcherActivities.orEmpty()
|
val launcherActivities = installed?.launcherActivities.orEmpty()
|
||||||
@@ -358,7 +357,6 @@ class ProductFragment(): ScreenFragment(), ProductAdapter.Callbacks {
|
|||||||
} else {
|
} else {
|
||||||
launcherActivities.firstOrNull()?.let { startLauncherActivity(it.first) }
|
launcherActivities.firstOrNull()?.let { startLauncherActivity(it.first) }
|
||||||
}
|
}
|
||||||
Unit
|
|
||||||
}
|
}
|
||||||
ProductAdapter.Action.DETAILS -> {
|
ProductAdapter.Action.DETAILS -> {
|
||||||
startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||||
@@ -373,9 +371,8 @@ class ProductFragment(): ScreenFragment(), ProductAdapter.Callbacks {
|
|||||||
if (downloading && binder != null) {
|
if (downloading && binder != null) {
|
||||||
binder.cancel(packageName)
|
binder.cancel(packageName)
|
||||||
}
|
}
|
||||||
Unit
|
|
||||||
}
|
}
|
||||||
}::class
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun startLauncherActivity(name: String) {
|
private fun startLauncherActivity(name: String) {
|
||||||
+11
-11
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -13,16 +13,16 @@ import android.widget.ImageView
|
|||||||
import android.widget.ProgressBar
|
import android.widget.ProgressBar
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
import com.michatec.store.entity.ProductItem
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.network.PicassoDownloader
|
import com.michatec.store.network.PicassoDownloader
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import nya.kitsunyan.foxydroid.widget.CursorRecyclerAdapter
|
import com.michatec.store.widget.CursorRecyclerAdapter
|
||||||
import nya.kitsunyan.foxydroid.widget.DividerItemDecoration
|
import com.michatec.store.widget.DividerItemDecoration
|
||||||
|
|
||||||
class ProductsAdapter(private val onClick: (ProductItem) -> Unit):
|
class ProductsAdapter(private val onClick: (ProductItem) -> Unit):
|
||||||
CursorRecyclerAdapter<ProductsAdapter.ViewType, RecyclerView.ViewHolder>() {
|
CursorRecyclerAdapter<ProductsAdapter.ViewType, RecyclerView.ViewHolder>() {
|
||||||
+8
-8
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
@@ -13,13 +13,13 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.database.CursorOwner
|
import com.michatec.store.database.CursorOwner
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
import com.michatec.store.entity.ProductItem
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import com.michatec.store.utility.RxUtils
|
||||||
import nya.kitsunyan.foxydroid.widget.DividerItemDecoration
|
import com.michatec.store.widget.DividerItemDecoration
|
||||||
import nya.kitsunyan.foxydroid.widget.RecyclerFastScroller
|
import com.michatec.store.widget.RecyclerFastScroller
|
||||||
|
|
||||||
class ProductsFragment(): ScreenFragment(), CursorOwner.Callback {
|
class ProductsFragment(): ScreenFragment(), CursorOwner.Callback {
|
||||||
companion object {
|
companion object {
|
||||||
+6
-6
@@ -1,15 +1,15 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Switch
|
import android.widget.Switch
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.widget.CursorRecyclerAdapter
|
import com.michatec.store.widget.CursorRecyclerAdapter
|
||||||
|
|
||||||
class RepositoriesAdapter(private val onClick: (Repository) -> Unit,
|
class RepositoriesAdapter(private val onClick: (Repository) -> Unit,
|
||||||
private val onSwitch: (repository: Repository, isEnabled: Boolean) -> Boolean):
|
private val onSwitch: (repository: Repository, isEnabled: Boolean) -> Boolean):
|
||||||
+6
-6
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
@@ -10,11 +10,11 @@ import android.widget.FrameLayout
|
|||||||
import android.widget.Toolbar
|
import android.widget.Toolbar
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.database.CursorOwner
|
import com.michatec.store.database.CursorOwner
|
||||||
import nya.kitsunyan.foxydroid.service.Connection
|
import com.michatec.store.service.Connection
|
||||||
import nya.kitsunyan.foxydroid.service.SyncService
|
import com.michatec.store.service.SyncService
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
|
|
||||||
class RepositoriesFragment: ScreenFragment(), CursorOwner.Callback {
|
class RepositoriesFragment: ScreenFragment(), CursorOwner.Callback {
|
||||||
private var recyclerView: RecyclerView? = null
|
private var recyclerView: RecyclerView? = null
|
||||||
+7
-7
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.SpannableStringBuilder
|
import android.text.SpannableStringBuilder
|
||||||
@@ -17,12 +17,12 @@ import android.widget.Toolbar
|
|||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.service.Connection
|
import com.michatec.store.service.Connection
|
||||||
import nya.kitsunyan.foxydroid.service.SyncService
|
import com.michatec.store.service.SyncService
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
+10
-10
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -14,15 +14,15 @@ import androidx.core.os.BundleCompat
|
|||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.content.Cache
|
import com.michatec.store.content.Cache
|
||||||
import nya.kitsunyan.foxydroid.content.Preferences
|
import com.michatec.store.content.Preferences
|
||||||
import nya.kitsunyan.foxydroid.database.CursorOwner
|
import com.michatec.store.database.CursorOwner
|
||||||
import nya.kitsunyan.foxydroid.utility.KParcelable
|
import com.michatec.store.utility.KParcelable
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
|
|
||||||
abstract class ScreenActivity: FragmentActivity() {
|
abstract class ScreenActivity: FragmentActivity() {
|
||||||
companion object {
|
companion object {
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
|
||||||
+11
-11
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -22,16 +22,16 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import com.michatec.store.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.graphics.PaddingDrawable
|
import com.michatec.store.graphics.PaddingDrawable
|
||||||
import nya.kitsunyan.foxydroid.network.PicassoDownloader
|
import com.michatec.store.network.PicassoDownloader
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import com.michatec.store.utility.RxUtils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.widget.StableRecyclerAdapter
|
import com.michatec.store.widget.StableRecyclerAdapter
|
||||||
|
|
||||||
class ScreenshotsFragment(): DialogFragment() {
|
class ScreenshotsFragment(): DialogFragment() {
|
||||||
companion object {
|
companion object {
|
||||||
+14
-14
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.screen
|
package com.michatec.store.screen
|
||||||
|
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -34,19 +34,19 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.content.Preferences
|
import com.michatec.store.content.Preferences
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
import com.michatec.store.entity.ProductItem
|
||||||
import nya.kitsunyan.foxydroid.service.Connection
|
import com.michatec.store.service.Connection
|
||||||
import nya.kitsunyan.foxydroid.service.SyncService
|
import com.michatec.store.service.SyncService
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import com.michatec.store.utility.RxUtils
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.widget.DividerItemDecoration
|
import com.michatec.store.widget.DividerItemDecoration
|
||||||
import nya.kitsunyan.foxydroid.widget.FocusSearchView
|
import com.michatec.store.widget.FocusSearchView
|
||||||
import nya.kitsunyan.foxydroid.widget.StableRecyclerAdapter
|
import com.michatec.store.widget.StableRecyclerAdapter
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
|
||||||
class TabsFragment: ScreenFragment() {
|
class TabsFragment: ScreenFragment() {
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.service
|
package com.michatec.store.service
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
+2
-2
@@ -1,9 +1,9 @@
|
|||||||
package nya.kitsunyan.foxydroid.service
|
package com.michatec.store.service
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
|
|
||||||
abstract class ConnectionService<T: IBinder>: Service() {
|
abstract class ConnectionService<T: IBinder>: Service() {
|
||||||
abstract override fun onBind(intent: Intent): T
|
abstract override fun onBind(intent: Intent): T
|
||||||
+13
-13
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.service
|
package com.michatec.store.service
|
||||||
|
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
@@ -13,18 +13,18 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||||
import nya.kitsunyan.foxydroid.BuildConfig
|
import com.michatec.store.BuildConfig
|
||||||
import nya.kitsunyan.foxydroid.Common
|
import com.michatec.store.Common
|
||||||
import nya.kitsunyan.foxydroid.MainActivity
|
import com.michatec.store.MainActivity
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.content.Cache
|
import com.michatec.store.content.Cache
|
||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import com.michatec.store.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.network.Downloader
|
import com.michatec.store.network.Downloader
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import com.michatec.store.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
+14
-14
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.service
|
package com.michatec.store.service
|
||||||
|
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
@@ -18,19 +18,19 @@ import io.reactivex.rxjava3.core.Observable
|
|||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||||
import nya.kitsunyan.foxydroid.BuildConfig
|
import com.michatec.store.BuildConfig
|
||||||
import nya.kitsunyan.foxydroid.Common
|
import com.michatec.store.Common
|
||||||
import nya.kitsunyan.foxydroid.MainActivity
|
import com.michatec.store.MainActivity
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.content.Preferences
|
import com.michatec.store.content.Preferences
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import com.michatec.store.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
import com.michatec.store.entity.ProductItem
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import com.michatec.store.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.index.RepositoryUpdater
|
import com.michatec.store.index.RepositoryUpdater
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import com.michatec.store.utility.RxUtils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.utility
|
package com.michatec.store.utility
|
||||||
|
|
||||||
import android.os.Parcel
|
import android.os.Parcel
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
package com.michatec.store.utility
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.pm.PackageItemInfo
|
||||||
|
import android.content.pm.PermissionInfo
|
||||||
|
import android.content.res.Resources
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
|
object PackageItemResolver {
|
||||||
|
class LocalCache {
|
||||||
|
internal val resources = mutableMapOf<String, Resources>()
|
||||||
|
}
|
||||||
|
|
||||||
|
private data class CacheKey(val locales: List<Locale>, val packageName: String, val resId: Int)
|
||||||
|
|
||||||
|
private val cache = mutableMapOf<CacheKey, String?>()
|
||||||
|
|
||||||
|
private fun load(context: Context, localCache: LocalCache, packageName: String,
|
||||||
|
nonLocalized: CharSequence?, resId: Int): CharSequence? {
|
||||||
|
return when {
|
||||||
|
nonLocalized != null -> {
|
||||||
|
nonLocalized
|
||||||
|
}
|
||||||
|
resId != 0 -> {
|
||||||
|
val localesList = context.resources.configuration.locales
|
||||||
|
val locales = (0 until localesList.size()).map(localesList::get)
|
||||||
|
|
||||||
|
val cacheKey = CacheKey(locales, packageName, resId)
|
||||||
|
if (cache.containsKey(cacheKey)) {
|
||||||
|
cache[cacheKey]
|
||||||
|
} else {
|
||||||
|
val resources = localCache.resources[packageName] ?: run {
|
||||||
|
val resources = try {
|
||||||
|
context.createPackageContext(packageName, 0)
|
||||||
|
.createConfigurationContext(context.resources.configuration)
|
||||||
|
.resources
|
||||||
|
} catch (_: Exception) {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
resources?.let { localCache.resources[packageName] = it }
|
||||||
|
resources
|
||||||
|
}
|
||||||
|
val label = resources?.getString(resId)
|
||||||
|
cache[cacheKey] = label
|
||||||
|
label
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun loadLabel(context: Context, localCache: LocalCache, packageItemInfo: PackageItemInfo): CharSequence? {
|
||||||
|
return load(context, localCache, packageItemInfo.packageName,
|
||||||
|
packageItemInfo.nonLocalizedLabel, packageItemInfo.labelRes)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun loadDescription(context: Context, localCache: LocalCache, permissionInfo: PermissionInfo): CharSequence? {
|
||||||
|
return load(context, localCache, permissionInfo.packageName,
|
||||||
|
permissionInfo.nonLocalizedDescription, permissionInfo.descriptionRes)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getPermissionGroup(permissionInfo: PermissionInfo): String? {
|
||||||
|
return when (permissionInfo.name) {
|
||||||
|
android.Manifest.permission.READ_CONTACTS,
|
||||||
|
android.Manifest.permission.WRITE_CONTACTS,
|
||||||
|
android.Manifest.permission.GET_ACCOUNTS ->
|
||||||
|
android.Manifest.permission_group.CONTACTS
|
||||||
|
android.Manifest.permission.READ_CALENDAR,
|
||||||
|
android.Manifest.permission.WRITE_CALENDAR ->
|
||||||
|
android.Manifest.permission_group.CALENDAR
|
||||||
|
android.Manifest.permission.SEND_SMS,
|
||||||
|
android.Manifest.permission.RECEIVE_SMS,
|
||||||
|
android.Manifest.permission.READ_SMS,
|
||||||
|
android.Manifest.permission.RECEIVE_MMS,
|
||||||
|
android.Manifest.permission.RECEIVE_WAP_PUSH,
|
||||||
|
"android.permission.READ_CELL_BROADCASTS" ->
|
||||||
|
android.Manifest.permission_group.SMS
|
||||||
|
android.Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||||
|
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||||
|
android.Manifest.permission.ACCESS_MEDIA_LOCATION ->
|
||||||
|
android.Manifest.permission_group.STORAGE
|
||||||
|
android.Manifest.permission.ACCESS_FINE_LOCATION,
|
||||||
|
android.Manifest.permission.ACCESS_COARSE_LOCATION,
|
||||||
|
android.Manifest.permission.ACCESS_BACKGROUND_LOCATION ->
|
||||||
|
android.Manifest.permission_group.LOCATION
|
||||||
|
android.Manifest.permission.READ_CALL_LOG,
|
||||||
|
android.Manifest.permission.WRITE_CALL_LOG,
|
||||||
|
android.Manifest.permission.READ_PHONE_STATE,
|
||||||
|
android.Manifest.permission.READ_PHONE_NUMBERS,
|
||||||
|
android.Manifest.permission.CALL_PHONE,
|
||||||
|
android.Manifest.permission.ADD_VOICEMAIL,
|
||||||
|
android.Manifest.permission.USE_SIP,
|
||||||
|
android.Manifest.permission.ANSWER_PHONE_CALLS,
|
||||||
|
android.Manifest.permission.ACCEPT_HANDOVER ->
|
||||||
|
android.Manifest.permission_group.PHONE
|
||||||
|
android.Manifest.permission.RECORD_AUDIO ->
|
||||||
|
android.Manifest.permission_group.MICROPHONE
|
||||||
|
android.Manifest.permission.ACTIVITY_RECOGNITION ->
|
||||||
|
android.Manifest.permission_group.ACTIVITY_RECOGNITION
|
||||||
|
android.Manifest.permission.CAMERA ->
|
||||||
|
android.Manifest.permission_group.CAMERA
|
||||||
|
android.Manifest.permission.BODY_SENSORS ->
|
||||||
|
android.Manifest.permission_group.SENSORS
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.utility
|
package com.michatec.store.utility
|
||||||
|
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.utility
|
package com.michatec.store.utility
|
||||||
|
|
||||||
import android.os.CancellationSignal
|
import android.os.CancellationSignal
|
||||||
import android.os.OperationCanceledException
|
import android.os.OperationCanceledException
|
||||||
+6
-6
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.utility
|
package com.michatec.store.utility
|
||||||
|
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
@@ -8,11 +8,11 @@ import android.content.res.Configuration
|
|||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.LocaleList
|
import android.os.LocaleList
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import nya.kitsunyan.foxydroid.BuildConfig
|
import com.michatec.store.BuildConfig
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import com.michatec.store.utility.extension.text.*
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
import java.security.cert.Certificate
|
import java.security.cert.Certificate
|
||||||
import java.security.cert.CertificateEncodingException
|
import java.security.cert.CertificateEncodingException
|
||||||
+9
-11
@@ -1,5 +1,5 @@
|
|||||||
@file:Suppress("PackageDirectoryMismatch")
|
@file:Suppress("PackageDirectoryMismatch")
|
||||||
package nya.kitsunyan.foxydroid.utility.extension.android
|
package com.michatec.store.utility.extension.android
|
||||||
|
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -25,16 +25,15 @@ val Context.notificationManager: NotificationManager
|
|||||||
get() = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
get() = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
|
|
||||||
val PackageInfo.versionCodeCompat: Long
|
val PackageInfo.versionCodeCompat: Long
|
||||||
get() = if (Android.sdk(28)) longVersionCode else @Suppress("DEPRECATION") versionCode.toLong()
|
get() = longVersionCode
|
||||||
|
|
||||||
val PackageInfo.singleSignature: Signature?
|
val PackageInfo.singleSignature: Signature?
|
||||||
get() {
|
get() {
|
||||||
return if (Android.sdk(28)) {
|
val signingInfo = signingInfo
|
||||||
val signingInfo = signingInfo
|
return if (signingInfo?.hasMultipleSigners() == false) {
|
||||||
if (signingInfo?.hasMultipleSigners() == false) signingInfo.apkContentsSigners
|
signingInfo.apkContentsSigners?.let { if (it.size == 1) it[0] else null }
|
||||||
?.let { if (it.size == 1) it[0] else null } else null
|
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,18 +55,17 @@ object Android {
|
|||||||
|
|
||||||
object PendingIntent {
|
object PendingIntent {
|
||||||
val FLAG_IMMUTABLE: Int
|
val FLAG_IMMUTABLE: Int
|
||||||
get() = if (sdk(23)) android.app.PendingIntent.FLAG_IMMUTABLE else 0
|
get() = android.app.PendingIntent.FLAG_IMMUTABLE
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object PackageManager {
|
object PackageManager {
|
||||||
val signaturesFlag: Int
|
val signaturesFlag: Int
|
||||||
get() = (if (sdk(28)) android.content.pm.PackageManager.GET_SIGNING_CERTIFICATES else 0)
|
get() = android.content.pm.PackageManager.GET_SIGNING_CERTIFICATES
|
||||||
}
|
}
|
||||||
|
|
||||||
object ServiceInfo {
|
object ServiceInfo {
|
||||||
val FOREGROUND_SERVICE_TYPE_DATA_SYNC: Int
|
val FOREGROUND_SERVICE_TYPE_DATA_SYNC: Int
|
||||||
get() = if (sdk(29)) android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC else 0
|
get() = android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
|
||||||
}
|
}
|
||||||
|
|
||||||
object Device {
|
object Device {
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
@file:Suppress("PackageDirectoryMismatch")
|
@file:Suppress("PackageDirectoryMismatch")
|
||||||
package nya.kitsunyan.foxydroid.utility.extension.json
|
package com.michatec.store.utility.extension.json
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonFactory
|
import com.fasterxml.jackson.core.JsonFactory
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
@file:Suppress("PackageDirectoryMismatch")
|
@file:Suppress("PackageDirectoryMismatch")
|
||||||
package nya.kitsunyan.foxydroid.utility.extension.resources
|
package com.michatec.store.utility.extension.resources
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
@@ -18,7 +18,7 @@ import androidx.core.content.ContextCompat
|
|||||||
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
|
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
|
||||||
import com.squareup.picasso.Picasso
|
import com.squareup.picasso.Picasso
|
||||||
import com.squareup.picasso.RequestCreator
|
import com.squareup.picasso.RequestCreator
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
import com.michatec.store.utility.extension.android.*
|
||||||
import org.xmlpull.v1.XmlPullParser
|
import org.xmlpull.v1.XmlPullParser
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
@file:Suppress("PackageDirectoryMismatch")
|
@file:Suppress("PackageDirectoryMismatch")
|
||||||
package nya.kitsunyan.foxydroid.utility.extension.text
|
package com.michatec.store.utility.extension.text
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import android.text.Selection
|
import android.text.Selection
|
||||||
import android.text.Spannable
|
import android.text.Spannable
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
+3
-3
@@ -1,12 +1,12 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import nya.kitsunyan.foxydroid.R
|
import com.michatec.store.R
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
|
||||||
class DividerItemDecoration(context: Context, private val configure: (context: Context,
|
class DividerItemDecoration(context: Context, private val configure: (context: Context,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import android.util.SparseArray
|
import android.util.SparseArray
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
@@ -7,7 +7,7 @@ import android.view.MotionEvent
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import com.michatec.store.utility.extension.resources.*
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
|
||||||
class RecyclerFastScroller(private val recyclerView: RecyclerView) {
|
class RecyclerFastScroller(private val recyclerView: RecyclerView) {
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package nya.kitsunyan.foxydroid.widget
|
package com.michatec.store.widget
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
package nya.kitsunyan.foxydroid.utility
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.pm.PackageItemInfo
|
|
||||||
import android.content.pm.PermissionInfo
|
|
||||||
import android.content.res.Resources
|
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
|
||||||
import java.util.Locale
|
|
||||||
|
|
||||||
object PackageItemResolver {
|
|
||||||
class LocalCache {
|
|
||||||
internal val resources = mutableMapOf<String, Resources>()
|
|
||||||
}
|
|
||||||
|
|
||||||
private data class CacheKey(val locales: List<Locale>, val packageName: String, val resId: Int)
|
|
||||||
|
|
||||||
private val cache = mutableMapOf<CacheKey, String?>()
|
|
||||||
|
|
||||||
private fun load(context: Context, localCache: LocalCache, packageName: String,
|
|
||||||
nonLocalized: CharSequence?, resId: Int): CharSequence? {
|
|
||||||
return when {
|
|
||||||
nonLocalized != null -> {
|
|
||||||
nonLocalized
|
|
||||||
}
|
|
||||||
resId != 0 -> {
|
|
||||||
val locales = if (Android.sdk(24)) {
|
|
||||||
val localesList = context.resources.configuration.locales
|
|
||||||
(0 until localesList.size()).map(localesList::get)
|
|
||||||
} else {
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
listOf(context.resources.configuration.locale)
|
|
||||||
}
|
|
||||||
val cacheKey = CacheKey(locales, packageName, resId)
|
|
||||||
if (cache.containsKey(cacheKey)) {
|
|
||||||
cache[cacheKey]
|
|
||||||
} else {
|
|
||||||
val resources = localCache.resources[packageName] ?: run {
|
|
||||||
val resources = try {
|
|
||||||
val resources = context.packageManager.getResourcesForApplication(packageName)
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
resources.updateConfiguration(context.resources.configuration, null)
|
|
||||||
resources
|
|
||||||
} catch (_: Exception) {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
resources?.let { localCache.resources[packageName] = it }
|
|
||||||
resources
|
|
||||||
}
|
|
||||||
val label = resources?.getString(resId)
|
|
||||||
cache[cacheKey] = label
|
|
||||||
label
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadLabel(context: Context, localCache: LocalCache, packageItemInfo: PackageItemInfo): CharSequence? {
|
|
||||||
return load(context, localCache, packageItemInfo.packageName,
|
|
||||||
packageItemInfo.nonLocalizedLabel, packageItemInfo.labelRes)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadDescription(context: Context, localCache: LocalCache, permissionInfo: PermissionInfo): CharSequence? {
|
|
||||||
return load(context, localCache, permissionInfo.packageName,
|
|
||||||
permissionInfo.nonLocalizedDescription, permissionInfo.descriptionRes)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getPermissionGroup(permissionInfo: PermissionInfo): String? {
|
|
||||||
return if (Android.sdk(29)) {
|
|
||||||
// Copied from package installer (Utils.java)
|
|
||||||
when (permissionInfo.name) {
|
|
||||||
android.Manifest.permission.READ_CONTACTS,
|
|
||||||
android.Manifest.permission.WRITE_CONTACTS,
|
|
||||||
android.Manifest.permission.GET_ACCOUNTS ->
|
|
||||||
android.Manifest.permission_group.CONTACTS
|
|
||||||
android.Manifest.permission.READ_CALENDAR,
|
|
||||||
android.Manifest.permission.WRITE_CALENDAR ->
|
|
||||||
android.Manifest.permission_group.CALENDAR
|
|
||||||
android.Manifest.permission.SEND_SMS,
|
|
||||||
android.Manifest.permission.RECEIVE_SMS,
|
|
||||||
android.Manifest.permission.READ_SMS,
|
|
||||||
android.Manifest.permission.RECEIVE_MMS,
|
|
||||||
android.Manifest.permission.RECEIVE_WAP_PUSH,
|
|
||||||
"android.permission.READ_CELL_BROADCASTS" ->
|
|
||||||
android.Manifest.permission_group.SMS
|
|
||||||
android.Manifest.permission.READ_EXTERNAL_STORAGE,
|
|
||||||
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
|
||||||
android.Manifest.permission.ACCESS_MEDIA_LOCATION ->
|
|
||||||
android.Manifest.permission_group.STORAGE
|
|
||||||
android.Manifest.permission.ACCESS_FINE_LOCATION,
|
|
||||||
android.Manifest.permission.ACCESS_COARSE_LOCATION,
|
|
||||||
android.Manifest.permission.ACCESS_BACKGROUND_LOCATION ->
|
|
||||||
android.Manifest.permission_group.LOCATION
|
|
||||||
android.Manifest.permission.READ_CALL_LOG,
|
|
||||||
android.Manifest.permission.WRITE_CALL_LOG,
|
|
||||||
@Suppress("DEPRECATION") android.Manifest.permission.PROCESS_OUTGOING_CALLS ->
|
|
||||||
android.Manifest.permission_group.CALL_LOG
|
|
||||||
android.Manifest.permission.READ_PHONE_STATE,
|
|
||||||
android.Manifest.permission.READ_PHONE_NUMBERS,
|
|
||||||
android.Manifest.permission.CALL_PHONE,
|
|
||||||
android.Manifest.permission.ADD_VOICEMAIL,
|
|
||||||
android.Manifest.permission.USE_SIP,
|
|
||||||
android.Manifest.permission.ANSWER_PHONE_CALLS,
|
|
||||||
android.Manifest.permission.ACCEPT_HANDOVER ->
|
|
||||||
android.Manifest.permission_group.PHONE
|
|
||||||
android.Manifest.permission.RECORD_AUDIO ->
|
|
||||||
android.Manifest.permission_group.MICROPHONE
|
|
||||||
android.Manifest.permission.ACTIVITY_RECOGNITION ->
|
|
||||||
android.Manifest.permission_group.ACTIVITY_RECOGNITION
|
|
||||||
android.Manifest.permission.CAMERA ->
|
|
||||||
android.Manifest.permission_group.CAMERA
|
|
||||||
android.Manifest.permission.BODY_SENSORS ->
|
|
||||||
android.Manifest.permission_group.SENSORS
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
permissionInfo.group
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
android:fontFamily="monospace"
|
android:fontFamily="monospace"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp"
|
||||||
android:inputType="textNoSuggestions|textMultiLine"
|
android:inputType="textNoSuggestions|textMultiLine"
|
||||||
tools:ignore="Autofill,LabelFor" />
|
tools:ignore="Autofill,LabelFor,Speakable" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/fingerprint_error"
|
android:id="@+id/fingerprint_error"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<nya.kitsunyan.foxydroid.widget.FragmentLinearLayout
|
<com.michatec.store.widget.FragmentLinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
android:background="?android:attr/colorPrimary"
|
android:background="?android:attr/colorPrimary"
|
||||||
android:elevation="4dp">
|
android:elevation="4dp">
|
||||||
|
|
||||||
<nya.kitsunyan.foxydroid.widget.Toolbar
|
<com.michatec.store.widget.Toolbar
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -33,4 +33,4 @@
|
|||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:background="?android:attr/colorBackground" />
|
android:background="?android:attr/colorBackground" />
|
||||||
|
|
||||||
</nya.kitsunyan.foxydroid.widget.FragmentLinearLayout>
|
</com.michatec.store.widget.FragmentLinearLayout>
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
|
android:text="@string/website"
|
||||||
style="@android:style/Widget.Material.Button" />
|
style="@android:style/Widget.Material.Button" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/section_layout"
|
android:id="@+id/section_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/section_change"
|
android:id="@+id/section_change"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<string name="always">Always</string>
|
<string name="always">Always</string>
|
||||||
<string name="anti_features">Anti-features</string>
|
<string name="anti_features">Anti-features</string>
|
||||||
<string name="application">Application</string>
|
<string name="application">Application</string>
|
||||||
<string name="application_name" translatable="false">Foxy Droid</string>
|
<string name="application_name" translatable="false">Store</string>
|
||||||
<string name="application_not_found">Application not found</string>
|
<string name="application_not_found">Application not found</string>
|
||||||
<string name="author_email">Author email</string>
|
<string name="author_email">Author email</string>
|
||||||
<string name="author_website">Author website</string>
|
<string name="author_website">Author website</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user