Skip to content

Instantly share code, notes, and snippets.

View Astroa7m's full-sized avatar

Ahmed Samir Astroa7m

  • Elkdocs
  • Muscat, Oman
  • 18:42 (UTC +04:00)
  • X @astroa7m
View GitHub Profile
@Astroa7m
Astroa7m / dependecies.gist
Created March 2, 2022 00:40
QR project dependecies
//Compose permission handling
implementation "com.google.accompanist:accompanist-permissions:0.24.2-alpha"
// CameraX
implementation "androidx.camera:camera-camera2:1.1.0-beta01"
implementation "androidx.camera:camera-lifecycle:1.1.0-beta01"
implementation "androidx.camera:camera-view:1.1.0-beta01"
//ML kit for android
implementation 'com.google.mlkit:barcode-scanning:17.0.2'
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
class QRCodeWIFIAnalyzer(
private val onSuccess: (ssid: String, password: String) -> Unit,
private val onFailure: (e: Exception) -> Unit
) : ImageAnalysis.Analyzer {
private val scanner: BarcodeScanner = BarcodeScanning.getClient(BarcodeScannerOptions.Builder().setBarcodeFormats(Barcode.FORMAT_QR_CODE).build())
@SuppressLint("UnsafeOptInUsageError")
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun PermissionRequest(
permission: String = Manifest.permission.CAMERA,
onPermissionPermanentlyDenied: @Composable () -> Unit,
onPermissionDenied: @Composable () -> Unit,
content: @Composable () -> Unit
) {
val permissionState = rememberPermissionState(permission)
@Composable
fun CameraPreview(
modifier: Modifier = Modifier,
scaleType: PreviewView.ScaleType = PreviewView.ScaleType.FILL_CENTER,
cameraSelector: CameraSelector = CameraSelector.DEFAULT_BACK_CAMERA,
onSuccess: (ssid: String, pw: String) -> Unit,
onFailure: (e: Exception) -> Unit
) {
val lifecycleOwner = LocalLifecycleOwner.current
@RequiresApi(Build.VERSION_CODES.Q)
fun connect29AndAbove(ssid: String, passPhrase: String) {
if (!wifiManager.isWifiEnabled) {
Toast.makeText(this, "Wifi is disabled please enable it to proceed", Toast.LENGTH_SHORT).show()
val panelIntent = Intent(Settings.Panel.ACTION_WIFI)
launcher.launch(panelIntent)
}
val suggestion = WifiNetworkSuggestion.Builder()
.setSsid(ssid)
.setWpa2Passphrase(passPhrase)
class MainActivity : ComponentActivity() {
private lateinit var wifiManager: WifiManager
private lateinit var connectivityManager: ConnectivityManager
private val launcher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {}
private var hasScanned = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
inline fun<T> is29AndAbove(
func: () -> T
) :T?{
return if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
func.invoke()
else
null
}
@Astroa7m
Astroa7m / build.gradle
Created June 9, 2022 05:10
constraint layout dependency
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1"
{
ConstraintSets: {
start: { ... },
end: { ... }
}
}