Skip to main content

Posts

Kotlin Returns and Jumps

Returns and Jumps Kotlin has three structural jump expressions: return . By default returns from the nearest enclosing function or anonymous function . break . Terminates the nearest enclosing loop. continue . Proceeds to the next step of the nearest enclosing loop. All of these expressions can be used as part of larger expressions: val s = person.name ?: return The type of these expressions is the Nothing type . Break and Continue Labels Any expression in Kotlin may be marked with a label . Labels have the form of an identifier followed by the @ sign, for example: abc@ , fooBar@ are valid labels (see the grammar ). To label an expression, we just put a label in front of it loop@ for (i in 1..100) { // ... } Now, we can qualify a break or a continue with a label: loop@ for (i in 1..100) { for (j in 1..100) { if (...) break@loop } } A break qualified with a label jumps to the execution point right after the loop marked with that label. A contin...

Kotlin Control Flow

Control Flow If Expression In Kotlin, if is an expression, i.e. it returns a value. Therefore there is no ternary operator (condition ? then : else), because ordinary if works fine in this role. // Traditional usage var max = a if (a < b) max = b // With else var max: Int if (a > b) { max = a } else { max = b } // As expression val max = if (a > b) a else b if branches can be blocks, and the last expression is the value of a block: val max = if (a > b) { print("Choose a") a } else { print("Choose b") b } If you're using if as an expression rather than a statement (for example, returning its value or assigning it to a variable), the expression is required to have an else branch. When Expression when replaces the switch operator of C-like languages. In the simplest form it looks like this when (x) { 1 -> print("x == 1") 2 -> print("x == 2") else -> { // Note the...

Kotlin Basic Types

Basic Types In Kotlin, everything is an object in the sense that we can call member functions and properties on any variable. Some types are built-in, because their implementation is optimized, but to the user they look like ordinary classes. In this section we describe most of these types: numbers, characters, booleans and arrays. Numbers Kotlin handles numbers in a way close to Java, but not exactly the same. For example, there are no implicit widening conversions for numbers, and literals are slightly different in some cases. Kotlin provides the following built-in types representing numbers (this is close to Java): Type Bit width Double 64 Float 32 Long 64 Int 32 Short 16 Byte 8 Note that characters are not numbers in Kotlin. Literal Constants There are the following kinds of literal constants for integral values: Decimals: 123 Longs are tagged by a capital L : 123L Hexadecimals: 0x0F Binaries: 0b00001011 NOTE: Octal literals a...

ExifInterface in Android

ExifInterface is a class for reading and writing Exif tags in a JPEG file or a RAW image file. Supported formats are: JPEG, DNG, CR2, NEF, NRW, ARW, RW2, ORF, PEF, SRW and RAF. Attribute mutation is supported for JPEG image files. In clear way we can say: Exif is a specification for supporting metadata in a file, mostly used for JPEG, TIFF, and other image formats. The TAG_-prefixed constants on ExifInterface identify common tags, though not every image will have every tag. Tags that are popular among developers include TAG_ORIENTATION (indicating the orientation of the camera when the image was captured) and the TAG_GPS_-prefixed family (for geotagging). With the release of the 25.1.0 Support Library, there's a new entry in the family: the ExifInterface Support Library. With significant improvements introduced in Android 7.1 to the framework's ExifInterface , it only made sense to make those available to all API 9+ devices via the Support Library's ExifInterf...

Changes to Device Identifiers in Android O

Android O introduces some improvements to help provide user control over the use of identifiers. These improvements include: limiting the use of device-scoped identifiers that are not resettable updating the Android O Wi-Fi stack in conjunction with changes to the Wi-Fi chipset firmware used by Pixel, Pixel XL and Nexus 5x phones to randomize MAC addresses in probe requests updating the way that applications request account information and providing more user-facing control Device identifier changes Here are some of the device identifier changes for Android O: Android ID In O, Android ID (Settings.Secure.ANDROID_ID or SSAID) has a different value for each app and each user on the device. Developers requiring a device-scoped identifier, should instead use a resettable identifier, such as Advertising ID , giving users more control. Advertising ID also provides a user-facing setting to limit ad tracking . Additionally in Android O: The ANDROID_ID value won...

Flexbox inside the RecyclerView as a LayoutManager (FlexboxLayoutManager).

Currently google has release the Flexbox which can be used for building flexible layouts using FlexboxLayout, it can be interpreted as an advanced LinearLayout because both layouts align their child views sequentially. For more detail on this flexbox-layout But here we are gonna work on Flexbox with RecyclerView. Flexbox with a large number of items in a scrollable container! Let's first see what are the Supported attributes / features comparison Due to some characteristics of the RecyclerView, some Flexbox attributes are not available/not implemented to the FlexboxLayoutManager. Here is a quick overview of the attributes/features comparison between the two containers. Attribute / Feature FlexboxLayout                FlexboxLayoutManager (RecyclerView) flexDirection flexWrap (except wrap_reverse ) justifyContent alignItems alignContent - layout_order - layout_fle...

Image Compression like WhatsApp in android

How to compress the image without loosing the quality. You can compress the image just like whatsapp like quality. File externalFile = new File(Environment. getExternalStorageDirectory () , " ProfilePic /helloimg.jpg" ) ; Uri externaluri = Uri. parse (externalFile.getPath()) ; compressImage(externaluri.toString() , "helloimg" ) ; // Method to compress Image Compress image public String compressImage (String imageUri , String imagenameName) { String filePath = getRealPathFromURI(imageUri) ; String fileName = imagenameName ; Bitmap scaledBitmap = null; BitmapFactory.Options options = new BitmapFactory.Options() ; //by setting this field as true, the actual bitmap pixels are not loaded in the memory. Just the bounds are loaded. If //you try the use the bitmap here, you will get null. options. inJustDecodeBounds = true; Bitmap bmp = BitmapFactory. decodeFile (filePath...