Minggu, 30 Maret 2025

Makmum Tidak Boleh Lebih Keras daripada Imam

Dalil dari Al-Qur’an dan Hadis)

Dalam shalat berjamaah, terdapat adab dan tata tertib yang harus diperhatikan, salah satunya adalah larangan bagi makmum untuk mengangkat suara melebihi suara imam. Hal ini bukan sekadar etika, tetapi memiliki dasar dalam Al-Qur’an dan hadis Nabi Muhammad shallallahu ‘alaihi wasallam.

Dalil dari Al-Qur’an

Allah Ta’ala berfirman dalam Surah Al-Hujurat ayat 2:

"Wahai orang-orang yang beriman, janganlah kamu meninggikan suaramu melebihi suara Nabi..."
(QS. Al-Hujurat: 2)

Meskipun ayat ini secara langsung berkaitan dengan adab terhadap Nabi Muhammad SAW, para ulama mengambil pelajaran bahwa dalam konteks ibadah berjamaah, termasuk shalat, tidak diperbolehkan bagi makmum meninggikan suara melebihi suara imam. Karena imam dalam shalat bertindak sebagai pemimpin, dan pemimpin harus dihormati sebagaimana kita menghormati Nabi dalam konteks ayat tersebut.

Dalil dari Hadis

Rasulullah SAW bersabda:

"Sesungguhnya imam itu dijadikan untuk diikuti, maka apabila ia bertakbir maka bertakbirlah kalian, dan apabila ia membaca, maka diamlah kalian..."
(HR. Bukhari dan Muslim)

Dalam hadis lain disebutkan:

“Hendaklah salah seorang dari kalian tidak mengangkat suaranya di atas suara imam ketika membaca (Al-Fatihah).”
(HR. Abu Dawud, no. 603 – Hadis Hasan)

Hadis-hadis di atas menegaskan bahwa makmum tidak boleh bersuara lebih keras dari imam, baik saat membaca takbir, bacaan Al-Fatihah, maupun bacaan-bacaan lainnya dalam shalat.

Hikmah dan Tujuan Larangan

  1. Menjaga kekhusyukan shalat berjamaah
    Suara makmum yang keras bisa mengganggu kekhusyukan jamaah lain dan membuat suasana shalat menjadi tidak tenang.

  2. Menjaga ketertiban shalat berjamaah
    Dalam berjamaah, imam berfungsi sebagai pemimpin yang harus diikuti. Jika makmum mendahului atau mengeraskan suara, maka tatanan ini bisa rusak.

  3. Menghindari fitnah dan kekacauan dalam shalat
    Suara makmum yang keras bisa menyebabkan makmum lain bingung dan tidak tahu mana suara imam yang harus diikuti.

Shalat berjamaah adalah bentuk ibadah kolektif yang memiliki keutamaan besar. Namun, keutamaannya hanya akan diperoleh jika dilaksanakan sesuai dengan tuntunan syariat. Maka dari itu, mari kita jaga adab dalam shalat berjamaah, termasuk tidak mengangkat suara melebihi suara imam, sebagai bentuk penghormatan dan ketundukan dalam ibadah kepada Allah SWT.

Kamis, 20 Maret 2025

Tugas 4 - Pemrograman Perangkat Bergerak G - Membuat Aplikasi DIce Roller

Berikut adalah penjelasan kode tugas membuat dice roller


1. Struktur Utama Aplikasi

Aplikasi ini memiliki satu aktivitas utama (MainActivity) yang menggunakan Jetpack Compose untuk membangun UI.

MainActivity (Entry Point)

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            DiceRoller_RakhaTheme {
                DiceRollerApp()
            }
        }
    }
}
  • enableEdgeToEdge() mengaktifkan tampilan layar penuh.
  • setContent { DiceRoller_RakhaTheme { DiceRollerApp() } } menentukan bahwa UI aplikasi akan mengikuti tema yang telah dibuat dan akan menampilkan fungsi DiceRollerApp().

2. Fungsi DiceRollerApp

@Preview(showBackground = true)
@Composable
fun DiceRollerApp() {
    DiceWithButtonAndImage(modifier = Modifier
        .fillMaxSize()
        .wrapContentSize(Alignment.Center)
    )
}
  • Fungsi ini adalah Composable function, yang berarti dapat digunakan untuk membangun UI dengan Jetpack Compose.
  • Fungsi ini memanggil DiceWithButtonAndImage() dengan modifier untuk mengisi layar penuh dan menempatkan kontennya di tengah.

3. Fungsi DiceWithButtonAndImage

@Composable
fun DiceWithButtonAndImage(modifier: Modifier = Modifier) {
    var result by remember { mutableStateOf(1) }
  • var result by remember { mutableStateOf(1) }
    • Variabel result menyimpan angka dadu (1 sampai 6).
    • remember digunakan agar nilai tetap tersimpan selama rekomposisi (misalnya, saat tombol ditekan).
    • mutableStateOf(1) memastikan nilai dapat berubah dan memicu pembaruan UI.

Menentukan Gambar Dadu

val imageResource = when (result) {
    1 -> R.drawable.dice_1
    2 -> R.drawable.dice_2
    3 -> R.drawable.dice_3
    4 -> R.drawable.dice_4
    5 -> R.drawable.dice_5
    else -> R.drawable.dice_6
}
  • imageResource dipilih berdasarkan nilai result, yang menentukan gambar dadu mana yang akan ditampilkan.

Membuat Tata Letak (Layout)

Column (
    modifier = modifier,
    horizontalAlignment = Alignment.CenterHorizontally
) {
  • Column digunakan untuk menata elemen UI secara vertikal.
  • horizontalAlignment = Alignment.CenterHorizontally memastikan elemen sejajar di tengah.

4. Komponen Button dan Logikanya

Button(onClick = { result = (1..6).random() }) {
    Text(text = stringResource(R.string.roll), fontSize = 24.sp)
}
  • Button adalah tombol yang bisa ditekan oleh pengguna.
  • onClick: Ketika tombol ditekan, result diubah menjadi angka acak dari 1 hingga 6 menggunakan (1..6).random().
  • Perubahan nilai result otomatis memperbarui UI karena Compose mendeteksi perubahan status.

5. Komponen Image

Image(
    painter = painterResource(imageResource),
    contentDescription = result.toString()
)
  • Image menampilkan gambar dadu berdasarkan imageResource.
  • painterResource(imageResource): Mengambil gambar dari res/drawable sesuai nilai result.
  • contentDescription = result.toString(): Memberikan teks deskripsi gambar untuk aksesibilitas.

Kode

package com.example.diceroller_rakha

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.diceroller_rakha.ui.theme.DiceRoller_RakhaTheme

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
DiceRoller_RakhaTheme {
DiceRollerApp()
}
}
}
}

@Preview(showBackground = true)
@Composable
fun DiceRollerApp() {
DiceWithButtonAndImage(modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center)
)
}

@Composable
fun DiceWithButtonAndImage(modifier: Modifier = Modifier) {
var result by remember { mutableStateOf(1) }
val imageResource = when (result) {
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
Column (
modifier = modifier,
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
painter = painterResource(imageResource),
contentDescription = result.toString()
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = { result = (1..6).random() }) {
Text(text = stringResource(R.string.roll), fontSize = 24.sp)
}
}
}
Hasil



Rabu, 19 Maret 2025

Tugas 3 - Pemrograman Perangkat Bergerak G - Membuat Aplikasi Ulang Tahun

Berikut adalah penjelasan mengenai tugas 3 PPB, yaitu proyek Android berbasis Jetpack Compose, yang digunakan untuk membuat UI dengan pendekatan deklaratif. Proyek ini adalah aplikasi sederhana yang menampilkan pesan "Happy Birthday Annisa!" dengan nama pengirim, "From Consetta."


Penjelasan Kode

1. Package & Import

package com.example.happybithday
  • Menentukan package aplikasi sebagai com.example.happybithday.
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.*
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.happybithday.ui.theme.HappyBithdayTheme
  • Mengimpor berbagai fungsi dan komponen dari Jetpack Compose untuk membuat UI.

2. MainActivity (Entry Point)

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            HappyBithdayTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    GreetingText(
                        "Happy Birthday Annisa!",
                        "From Consetta",
                        modifier = Modifier.padding(8.dp)
                    )
                }
            }
        }
    }
}
  • MainActivity adalah activity utama yang menjalankan aplikasi.
  • enableEdgeToEdge() memungkinkan tampilan layar penuh tanpa batas tepi.
  • setContent { ... } digunakan untuk mengatur UI aplikasi dengan Jetpack Compose.
  • HappyBithdayTheme adalah tema kustom yang digunakan.
  • Surface adalah wadah dasar UI dengan warna latar belakang yang diambil dari tema Material 3.
  • GreetingText(...) menampilkan teks ulang tahun.

3. Fungsi GreetingText (Composable)

@Composable
fun GreetingText(message: String, from: String, modifier: Modifier = Modifier) {
    Column (
        verticalArrangement = Arrangement.Center,
        modifier = modifier
    ){
        Text(
            text = message,
            fontSize = 100.sp,
            lineHeight = 132.sp,
            textAlign = TextAlign.Center
        )
        Text(
            text = from,
            fontSize = 32.sp,
            modifier = Modifier
                .padding(16.dp)
                .align(alignment = Alignment.End)
        )
    }
}
  • Fungsi ini adalah Composable, yaitu fungsi yang dapat digunakan untuk membangun UI dengan Jetpack Compose.
  • Column digunakan untuk menyusun teks secara vertikal.
  • Text(...) menampilkan teks dengan atribut seperti ukuran (fontSize), jarak antar baris (lineHeight), dan perataan (textAlign).
  • modifier digunakan untuk menyesuaikan tampilan dengan padding dan alignment.

4. Fungsi BirthdayCardPreview (Preview)

@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
    HappyBithdayTheme {
        GreetingText("Happy Birthday Annisa!", "From Consetta")
    }
}
  • @Preview digunakan untuk menampilkan preview UI langsung di Android Studio tanpa menjalankan aplikasi.
  • showBackground = true menampilkan background dalam preview.

Hasil



Penjelasan Konsep Jetpack Compose

1. @Composable

  • Anotasi @Composable digunakan untuk menandai fungsi yang menghasilkan UI di Jetpack Compose.
  • Contoh:
    @Composable
    fun MyComponent() {
        Text("Hello, Compose!")
    }
    

2. Modifier

  • Modifier digunakan untuk mengubah tampilan dan perilaku komponen dalam Compose.

  • Contoh penggunaan:

    Text(
        text = "Hello",
        modifier = Modifier.padding(16.dp)
    )
    

    Menambahkan padding 16dp di sekitar teks.

  • Modifier lainnya:

    • .fillMaxSize() → Mengisi seluruh layar.
    • .background(Color.Red) → Memberi warna latar belakang merah.
    • .align(Alignment.CenterHorizontally) → Menyusun elemen secara horizontal di tengah.

3. sp dan dp

  • sp (Scale-independent Pixels): Digunakan untuk ukuran teks agar tetap proporsional dengan pengaturan ukuran font pengguna.
    Text(text = "Hello", fontSize = 24.sp)
    
  • dp (Density-independent Pixels): Digunakan untuk ukuran elemen UI agar sesuai di berbagai kepadatan layar.
    Modifier.padding(16.dp)
    

Cara Memodifikasi Atribut Teks

Misalkan ingin mengubah warna teks, jenis font, atau ketebalan:

Text(
    text = "Selamat Ulang Tahun!",
    fontSize = 100.sp,
    color = Color.Red, 
    fontWeight = FontWeight.Bold,
    fontStyle = FontStyle.Italic,
    textAlign = TextAlign.Center
)

Contoh lain, mengganti font dengan FontFamily:

import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight

Text(
    text = "Selamat Ulang Tahun!",
    fontSize = 100.sp,
    fontFamily = FontFamily.Serif, 
    fontWeight = FontWeight.Bold
)

Kode di atas adalah contoh sederhana aplikasi Birthday Card dengan Jetpack Compose.

Kamis, 06 Maret 2025

Tugas 2 - Pemrograman Perangkat Bergerak G - Membuat Hello Android

Tugas 2 - Pemrograman Perangkat Bergerak G

Rakha Fathin Izzan Consetta - 5025221156

Kode

package com.example.helloworld

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.helloworld.ui.theme.HelloworldTheme

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
HelloworldTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Greeting(
name = "Android",
modifier = Modifier.padding(innerPadding)
)
}
}
}
}
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}

@Preview(showBackground = true, name = "Text preview - Tugas 1 PPB G - 5025221156")
@Composable
fun GreetingPreview() {
HelloworldTheme {
Greeting("Android")
}
}

Semua kode diatas sudab sesuai template tutorial pada link berikut: 
Codelabs - Jetpack Compose Basics

Mari kita sorot potongan kode yang sedikit dimodifikasi
@Preview(showBackground = true,  name = "Text preview - Tugas 1 PPB G - 5025221156")
@Composable
fun GreetingPreview() {
HelloworldTheme {
Greeting("Android")
}
}

  • @Preview(...) menampilkan preview tampilan di Android Studio.
  • showBackground = true menampilkan latar belakang dalam preview.
  • name = "Text preview - Tugas 1 PPB G - 5025221156" memberi nama pada tampilan preview.
  • GreetingPreview() adalah fungsi yang digunakan untuk menampilkan pratinjau Greeting.

Hasil


EAS PPB - Aplikasi Edukasi dan Penjemputan Sampah dengan AI Deteksi Jenis Sampah

Laporan Proyek Akhir PPB: Membangun Aplik asi "Cemungut" dengan Flutter dan Firebase Halo semua! Selamat datang di laporan akhir p...